2012-09-15 8 views
13

Pracuję nad Androidem. Użyłem do tego bazy danych sqlite. Mam tabele w bazie danych. Stworzyłem klasę databasehelper. Chcę policzyć liczbę rekordów w konkretnej tabeli. Jak mogę to osiągnąć? jakakolwiek pomoc zostanie doceniona?Jak liczyć liczbę rekordów w sqlite w Androidzie

+0

Długość kursora nadziei pomoże. – MAC

+2

'return db.rawQuery (" SELECT _id FROM table ", null) .getCount();' –

Odpowiedz

12

Stosując SELECT COUNT(*) FROM table_name zapytania i niż liczyć wielkości kursora ..

metody od kursora liczyć wielkość (ilość wierszy kursora) jest

getCount() 

Zwraca numery wierszy w kursie.

OR:

Od DatabaseUtils zastosowanie metoda queryNumEntries(SQLiteDatabase db, String table)

Jak,

long numberOfRows = DatabaseUtils.queryNumEntries(db, "table_name");

który zwraca liczbę wierszy w tabeli.

+1

Czy kursor zawsze będzie 1 ... Czy rzeczywiście nie chcesz pobrać pierwszego rekordu w kursorze a następnie spojrzeć w indeksie 0 dla zliczenia? – earnshae

+0

Można również przekazywać argumenty wyboru za pomocą metody 'DatabaseUtils.queryNumEntries (SQLiteDatabase db, String tabela, String selection, String [] selectionArgs)'. –

8

Spróbuj tego.

Cursor c = db.rawQuery("select * from your_table_name",null); 
Log.i("Number of Records"," :: "+c.getCount()); 

Edit:c.getCount() zwraca liczbę zapisów konkretnej tabeli.

+0

.getCount() jest w porządku, jeśli otrzymujesz główne dane w innym celu, ale odzyskujesz wszystkie dane tylko w celu zliczenia ich nieefektywności. RawQuery z "wybierz liczbę (*) z twojego_nazwa_tabeli" byłoby lepsze zgodnie z sugestią @Nick Bradbury – RobT

+0

@RobT Dzięki za twoją sugestię –

+0

Po wybraniu wszystkich pól możesz wybrać jedno pole. To dotyczy optymalizacji. –

43

To byłoby bardziej efektywne:

int numRows = DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM table_name", null); 

Lub:

int numRows = DatabaseUtils.queryNumEntries(db, "table_name"); 
+7

Oba nie działają, jeśli nie rzuca się ich (int), ponieważ zwracają długi. – algorithms

+0

// TODO 'queryNumEntries' nie działa z 2.2 ... Niech praca ... –

+1

Dzięki Nick. Twoja druga odpowiedź jest zgodna z dokumentacją Google: http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String) Używaj długo zamiast int. na przykład long numRows = DatabaseUtils.queryNumEntries (db, "table_name"); –

0

Spróbuj tego:

W swojej DatabaseHelper.java:

public Cursor getYourTableContents() { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    Cursor data = db.rawQuery("SELECT * FROM " + "Your table name", null); 

    return data; 
} 

aby uzyskać liczba rzędów w twoim stole :

Cursor yourCursor = myDB.getYourTableContents(); 

int i = 0; 

while (yourCursor.moveToNext()) { 
    i += 1; 
} 

i jest twoje wiersze liczyć jako liczba całkowita.

Powiązane problemy