2011-06-15 15 views
47

¿Cómo obtengo el recuento de filas de una consulta en Android usando SQLite? Parece que mi siguiente método no funciona.¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?

public int getFragmentCountByMixId(int mixId) { 
    int count = 0; 
    SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 

    Cursor cursor = db.rawQuery(
     "select count(*) from downloadedFragement where mixId=?", 
     new String[]{String.valueOf(mixId)}); 
    while(cursor.moveToFirst()){ 
     count = cursor.getInt(0); 
    } 
    return count; 
}  
+0

Sin relación a la pregunta: No se pueden recorrer un cursor llamando "moveToFirst" indefinidamente. Debería llamarlo una vez y luego usar while (cursor.moveToNext()) {... – Ankhwatcher

Respuesta

100
+4

No sé cómo funcionaría esto con su implementación actual, pero si simplemente cambia el recuento (*) a *, esto debería funcionar . – Noel

+2

Creo que la mejor solución 'return (int) DatabaseUtils.longForQuery (mDB," SELECT COUNT (*) FROM table_name ", null);' –

+0

Esto devolvería 0 para un cursor que tiene 1 fila. –

0

de consulta para la columna _ID en la tabla y luego llamar getCount el cursor. Aquí hay un link que estoy haciendo en uno de mis proyectos. Mira número de línea 110.

0

uso de cadenas en lugar de int

String strCount = ""; 
int count = 0; 
SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 

Cursor cursor = db.rawQuery(
    "select count(*) from downloadedFragement where mixId=?", 
    new String[]{String.valueOf(mixId)}); 

while(cursor.moveToFirst()){ 
    strCount = cursor.getString(cursor.getColumnIndex("COUNT(*)")); 
} 
count = Integer.valueOf(strCount).intValue(); 
7
cursor.moveToNext(); 
cursor.getCount(); 

Si, puede surgir la cursorIndexOutOfBoundException la MoveToNext() no se llama.

+0

No lo creo –

2

Esto sería más eficiente porque el trabajo para todas las versiones:

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

o

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

o si desea obtener el número de filas, que específica selección entonces debería ir con (agregado en API 11)

public static long queryNumEntries (SQLiteDatabase db, String table, String selection) 

Gracias :)

0

En DatabaseUtils

public static long queryNumEntries(SQLiteDatabase db, String table) 
+0

¿Qué sucede si se trata de una base de datos en memoria, sin nombre de base de datos? –

+0

¿Sigue siendo una buena elección o ha quedado obsoleto "DatabaseUtils.queryNumEntries"? – AJW

Cuestiones relacionadas