SQLite Query in Android per contare le righe

Sto cercando di creare un semplice modulo di accesso, in cui confronto l’ID di accesso e la password immessi nella schermata di accesso con quella archiviata nel database.

Sto usando la seguente query:

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

Il problema è, non so, come posso eseguire la query sopra e memorizzare il conteggio restituito.

Ecco come appare la tabella del database (ho maneggiato per creare correttamente il database usando il metodo 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);"; 

Qualcuno può gentilmente guidarmi su come posso ottenere questo? Se ansible, fornire uno snippet di esempio per eseguire l’attività sopra descritta.

DatabaseUtils.queryNumEntries (since api: 11) è un’alternativa utile che nega la necessità di SQL raw (yay!).

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

@scottyab il Parametrized DatabaseUtils.queryNumEntries (db, table, whereparams) esiste in API 11 +, quello senza i whereparam esiste dall’API 1 . La risposta dovrebbe essere la creazione di un cursore con una 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(); 

Mi piace anche la risposta di @Dre, con la query parametrizzata.

Utilizzare un SQLiteStatement .

per esempio

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

Supponendo che tu abbia già una connessione Database ( db ) stabilita, penso che il modo più elegante sia quello di attenersi alla class Cursor , e fare qualcosa del tipo:

 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; 

Vedi rawQuery (String, String []) e la documentazione per Cursore

La tua istruzione SQL DADABASE_COMPARE non è attualmente valida, loginpass e loginpass non saranno sfuggiti, non c’è spazio tra il loginname e il and , e si termina l’istruzione con); invece di ; – Se stavi effettuando il login come bob con la password della password, quella dichiarazione sarebbe finita come

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

Inoltre, dovresti probabilmente usare la funzione selectionArgs, invece di concatenare loginname e loginpass.

Per usare selectionArgs si dovrebbe fare qualcosa di simile

 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 }); ... } 

come ottenere la colonna dei conteggi

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

Questa è l’alternativa più concisa e precisa. Non c’è bisogno di gestire i cursori e la loro chiusura.

Se si utilizza ContentProvider, è ansible utilizzare:

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

Un altro modo sarebbe utilizzare:

 myCursor.getCount(); 

su un Cursore come:

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

Se riesci a pensare di allontanarti dalla query non elaborata.

Se si desidera ottenere il conteggio dei record, è necessario applicare il gruppo in un campo o applicare la query seguente.

Piace

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