2012-09-15 23 views
13

Estoy trabajando en el proyecto de Android. Usé la base de datos sqlite para eso. Tengo tablas en la base de datos. He creado la clase databasehelper. Quiero contar el número de registros en una tabla particular. Cómo puedo conseguir esto ? cualquier ayuda será apreciada?Cómo contar el número de registros en sqlite en Android

+0

Hope cursor length te ayudará. – MAC

+2

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

Respuesta

12

Usando SELECT COUNT(*) FROM table_name consulta y, a cuenta el tamaño del cursor ..

El método de cursor para contar el tamaño (número de filas de cursor) es,

getCount() 

devuelve los números de filas en el cursor.

OR:

De DatabaseUtils uso del método queryNumEntries(SQLiteDatabase db, String table)

Como,

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

que devuelve el número de filas en la tabla de.

+1

¿No es el cursor siempre el 1 ... No quiere buscar realmente el primer registro en el cursor y luego mira en el índice 0 para el conteo? – earnshae

+0

También puede pasar argumentos de selección utilizando el método 'DatabaseUtils.queryNumEntries (SQLiteDatabase db, String table, String selection, String [] selectionArgs)'. –

8

Pruebe esto.

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

Editar:c.getCount() devuelve el número de registros de especial tabla.

+0

.getCount() está bien si está obteniendo los datos principales para otro fin, pero recuperar todos los datos solo para contarlos es ineficiente. Una pregunta cruda de "select count (*) from your_table_name" sería mejor según lo sugerido por @Nick Bradbury – RobT

+0

@RobT Gracias por su sugerencia –

+0

Por qué al seleccionar todos los campos, puede seleccionar cualquier campo. Esto es para la Optimización. –

43

Esto sería más eficiente:

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

O:

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

Ambos no funcionan si no los lanzas a (int) ya que regresan mucho. – algorithms

+0

// TODO 'queryNumEntries' no funciona con 2.2 ... Funciona ... –

+1

Gracias Nick. Su segunda respuesta está bien de acuerdo con la documentación de Google: http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String) Use long en lugar de int. p.ej. long numRows = DatabaseUtils.queryNumEntries (db, "table_name"); –

0

Por favor, intente esto:

En su DatabaseHelper.java:

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

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

    return data; 
} 

Para obtener el número de filas en su mesa :

Cursor yourCursor = myDB.getYourTableContents(); 

int i = 0; 

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

i es sus filas cuentan como un entero.

Cuestiones relacionadas