Requête SQLite sur Android pour compter les lignes

j'essaie de créer un simple formulaire de connexion, où je compare l'id de connexion et le mot de passe entrés à l'écran de connexion avec celui stocké dans la base de données.

j'utilise la requête suivante:

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

le problème est, Je ne sais pas, comment puis-je exécuter la requête ci-dessus et stocker le nombre retourné.

voici à quoi ressemble la table de base de données ( j'ai géré pour créer la base de données avec succès en utilisant la méthode 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);";

Quelqu'un peut-il me guider sur la façon dont je peux atteindre cet objectif? Si possible, veuillez fournir un échantillon pour effectuer la tâche ci-dessus.

87
demandé sur marc_s 2011-03-05 09:58:47

10 réponses

DatabaseUtils.queryNumEntries (depuis api: 11) est une alternative utile qui nie le besoin de SQL brut(yay!).

SQLiteDatabase db = getReadableDatabase();
DatabaseUtils.queryNumEntries(db, "users",
                "uname=? AND pwd=?", new String[] {loginname,loginpass});
113
répondu scottyab 2012-01-30 16:42:44

@scottyab la paramétrées DatabaseUtils.queryNumEntries (db, table, whereparams) existe à API 11 +, celui sans whereparams existe depuis API 1 . La réponse devrait être de créer un curseur avec 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();

j'aime aussi la réponse de @Dre, avec la requête paramétrée.

110
répondu ghchinoy 2012-01-18 14:37:00

utiliser un SQLiteStatement .

p.ex.

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

  long count = s.simpleQueryForLong();
62
répondu Teknogrebo 2014-11-04 23:26:06

en supposant que vous avez déjà une connexion de base de données ( db ) établie, je pense que la façon la plus élégante est de s'en tenir à la classe Cursor , et de faire quelque chose comme:

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;
22
répondu Eloi Navarro 2017-07-11 20:33:25

voir rawQuery (String, String[]) et la documentation pour curseur

"

votre déclaration DADABASE_COMPARE SQL est actuellement invalide, loginname et loginpass ne seront pas échappés, il n'y a pas d'espace entre loginname et le and , et vous terminez la déclaration avec); au lieu de; -- Si vous étiez connecté en tant que bob avec le mot de passe de password, cette déclaration se terminerait par

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

aussi, vous devriez probablement utiliser la fonctionnalité selectionArgs, au lieu de concaténer loginname et loginpass.

pour utiliser selectionArgs vous feriez quelque chose comme

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 });
    ...
}
20
répondu Dre 2011-03-05 07:50:24

comment obtenir une colonne count

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

int sometotal = (int) DatabaseUtils.longForQuery(db, DATABASE_COMPARE, null);

c'est l'alternative la plus concise et précise. Pas besoin de gérer les curseurs et leur fermeture.

12
répondu kontinuity 2017-05-23 10:31:26

si vous utilisez ContentProvider alors vous pouvez utiliser:

Cursor cursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*)"},
            uname=" + loginname + " and pwd=" + loginpass, null, null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);
6
répondu Beshoy Fayez 2014-02-14 01:06:15

une autre façon serait d'utiliser:

myCursor.getCount();

sur un curseur comme:

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 vous pouvez penser à s'éloigner de la première requête.

5
répondu Jochen Reinschlüssel 2013-06-18 07:03:03

Si vous voulez obtenir le nombre d'enregistrements, vous devez alors appliquer le groupe sur le terrain, ou d'appliquer la requête ci-dessous.

Comme

db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
5
répondu Chirag 2016-05-04 09:56:51
int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();
1
répondu Antoine Luckenson 2018-09-14 03:22:21