Consulta SQLite en Android para contar filas

Estoy tratando de crear un formulario de inicio de sesión simple, donde comparo el ID de inicio de sesión y la contraseña introducida en la pantalla de inicio de sesión con la que se almacena en la base de datos.

Estoy utilizando la siguiente consulta:

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

El problema es, no sé, ¿cómo puedo ejecutar la consulta anterior y almacenar el recuento devuelto.

Así es como se ve la tabla de la base de datos (he logrado crear la base de datos correctamente 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 en cuanto a 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 en bruto (yay!).

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

@scottyab el parametrizado DatabaseUtils.queryNumEntries (db, table, whereparams) existe en API 11 +, el que no tiene los parados desde API 1 . La respuesta tendría que estar creando un Cursor con un 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.

Utilice un SQLiteStatement .

p.ej

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

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

Su instrucción SQL DADABASE_COMPARE es actualmente inválida, nombre de loginpass y loginpass no se loginpass , no hay espacio entre nombre de loginpass y el and , y finalizar la instrucción con); en lugar de ; – Si estaba ingresando como bob con la contraseña de contraseña, esa declaración terminaría como

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

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

Para usar selectArgs haría 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 }); ... } 

Suponiendo que ya tiene una conexión de base de datos ( db ) establecida, creo que la forma más elegante es atenerse a 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; 

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 hay necesidad de manejar cursores y su cierre.

Si utiliza ContentProvider, puede utilizar:

 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 utilizar:

 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 un campo o aplicar la consulta siguiente.

Me gusta

 db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null); 
  • Cómo almacenar la base de datos SQLite de Android en sdcard
  • Tabla normal vs tabla virtual SQLite DB
  • Citas de Android dentro de una cadena de consulta SQL
  • Nuevo carácter de línea \ n no se muestra correctamente en textView Android
  • Seleccione la última fila
  • Comprobación de consultas de Sqlite - menor y mayor que
  • ¿Qué tipos de caché realiza SQLite en Android?
  • No se puede abrir el directorio de datos en el teléfono Android con raíz
  • Formatear un entero a una fecha formateada en una instrucción SQLite select
  • Implementación correcta de la base de datos Android asíncrona de SQLite
  • SQLiteDatabase transacción anidada y solución alternativa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.