Consulta SQLite en Android para contar filas

Intento crear un formulario de inicio de sesión simple, donde comparo el ID de inicio de sesión y la contraseña ingresados ​​en la pantalla de inicio de sesión con los almacenados en la base de datos.

Estoy usando la siguiente consulta:

final String DATABASE_COMPARE = "select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ; 

El problema es que no sé cómo puedo ejecutar la consulta anterior y almacenar el conteo devuelto.

Así es como se ve la tabla de la base de datos (he manejado para crear la base de datos exitosamente usando el método execSQl)

 private static final String DATABASE_CREATE = "create table users (_id integer autoincrement, " + "name text not null, uname primary key text not null, " + "pwd text not null);";//+"phoneno text not null);"; 

¿Puede alguien amablemente guiarme sobre cómo puedo lograr esto? Si es posible, proporcione un fragmento de muestra para realizar la tarea anterior.

DatabaseUtils.queryNumEntries (desde api: 11) es una alternativa útil que niega la necesidad de SQL sin procesar (yay!).

 SQLiteDatabase db = getReadableDatabase(); DatabaseUtils.queryNumEntries(db, "users", "uname=? AND pwd=?", new String[] {loginname,loginpass}); 

@scottyab el DatabaseUtils.queryNumEntries parametrizado (db, table, whereparams) existe en la API 11 +, el que no tiene los paramos existe desde la API 1 . La respuesta debería ser crear un Cursor con db.rawQuery:

 Cursor mCount= db.rawQuery("select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass +"'", null); mCount.moveToFirst(); int count= mCount.getInt(0); mCount.close(); 

También me gusta la respuesta de @Dre, con la consulta parametrizada.

Use un SQLiteStatement .

p.ej

  SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " ); long count = s.simpleQueryForLong(); 

Suponiendo que ya tiene una conexión de base de datos ( db ) establecida, creo que la forma más elegante es seguir la clase Cursor y hacer algo como:

 String selection = "uname = ? AND pwd = ?"; String[] selectionArgs = {loginname, loginpass}; String tableName = "YourTable"; Cursor c = db.query(tableName, null, selection, selectionArgs, null, null, null); int result = c.getCount(); c.close(); return result; 

Ver rawQuery (String, String []) y la documentación para Cursor

Su instrucción DADABASE_COMPARE SQL actualmente no es válida, loginpass y loginpass no serán escapados, no hay espacio entre loginname y the and , y termina la instrucción con); en lugar de ; – Si estuviera iniciando sesión como bob con la contraseña de contraseña, esa statement terminaría como

 select count(*) from users where uname=boband pwd=password); 

Además, probablemente debería utilizar la función selectionArgs, en lugar de concatenar loginname y loginpass.

Para usar selectionArgs harías algo como

 final String SQL_STATEMENT = "SELECT COUNT(*) FROM users WHERE uname=? AND pwd=?"; private void someMethod() { Cursor c = db.rawQuery(SQL_STATEMENT, new String[] { loginname, loginpass }); ... } 

cómo obtener la columna de conteo

 final String DATABASE_COMPARE = "select count(*) from users where uname="+loginname+ "and pwd="+loginpass; int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null); 

Esta es la alternativa más concisa y precisa. No es necesario manejar los cursores y su cierre.

Si está utilizando ContentProvider, puede usar:

 Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"}, uname=" + loginname + " and pwd=" + loginpass, null, null); cursor.moveToFirst(); int count = cursor.getInt(0); 

Otra forma sería usar:

 myCursor.getCount(); 

en un Cursor como:

 Cursor myCursor = db.query(table_Name, new String[] { row_Username }, row_Username + " =? AND " + row_Password + " =?", new String[] { entered_Password, entered_Password }, null, null, null); 

Si puede pensar en alejarse de la consulta en bruto.

Si desea obtener el recuento de registros, debe aplicar el grupo en algún campo o aplicar la consulta siguiente.

Me gusta

 db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);