2012-09-15 16 views
13

Sto lavorando su progetto Android. Ho usato il database SQLite per questo. Ho tabelle nel database. Ho creato la classe databasehelper. Voglio contare il numero di record in una tabella particolare. Come posso raggiungere questo obiettivo ? Qualsiasi aiuto sarà apprezzato?Come contare il numero di record in sqlite in Android

+0

Spero che la lunghezza del cursore sia di aiuto. – MAC

+2

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

risposta

12

Uso SELECT COUNT(*) FROM table_name query e, rispetto contare le dimensioni del cursore ..

Il metodo dal cursore per contare dimensioni (numero di righe cursore) è,

getCount() 

restituisce i numeri di righe nel cursore.

O:

Da DatabaseUtils utilizzare metodo queryNumEntries(SQLiteDatabase db, String table)

Come,

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

che restituisce il numero di righe della tabella.

+1

Il cursore sarà sempre 1 ... In realtà non vuoi recuperare il primo record nel cursore e poi guarda nell'indice 0 per il conteggio? – earnshae

+0

È anche possibile passare gli argomenti di selezione utilizzando il metodo 'DatabaseUtils.queryNumEntries (SQLiteDatabase db, String table, String selection, String [] selectionArgs)'. –

8

Prova questo.

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

Edit:c.getCount() restituisce il numero di record di particolare tabella.

+0

.getCount() va bene se si stanno ottenendo i dati principali per un altro scopo ma recuperare tutti i dati solo per contare è inefficiente. Una query raw di "select count (*) from your_table_name" sarebbe migliore come suggerito da @Nick Bradbury – RobT

+0

@RobT Grazie per il tuo suggerimento –

+0

Perchè selezionando tutti i campi, puoi selezionare qualsiasi campo. Questo è per l'ottimizzazione. –

43

Questo sarebbe più efficiente:

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

Oppure:

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

Entrambi non funzionano se non li si esegue in (int) poiché restituiscono un valore lungo. – algorithms

+0

// TODO 'queryNumEntries' non funziona con 2.2 ... Make Working .. –

+1

Grazie Nick. La seconda risposta va bene secondo la documentazione di Google: http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String) Utilizza long invece di int. per esempio. long numRows = DatabaseUtils.queryNumEntries (db, "nome_tabella"); –

0

Si prega di provare questo:

Nel vostro DatabaseHelper.java:

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

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

    return data; 
} 

Per ottenere numero di righe nella tua tabella :

Cursor yourCursor = myDB.getYourTableContents(); 

int i = 0; 

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

i è il valore del tuo righe come un intero.

Problemi correlati