web-dev-qa-db-fra.com

Requête SQLite dans Android pour compter les lignes

J'essaie de créer un formulaire de connexion simple, dans lequel je compare l'ID de connexion et le mot de passe entrés sur l'écran de connexion avec ceux stockés 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 réussi à créer la base de données à l'aide de 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);";

Est-ce que quelqu'un peut me guider avec bonté pour savoir comment y parvenir? Si possible, veuillez fournir un extrait de code pour effectuer la tâche ci-dessus.

91
arun

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

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

@scottyab the parametrized DatabaseUtils.queryNumEntries (db, table, whereparams) existe à l'API 11 +, celle sans ce qui est le cas depuis API 1 . La réponse devrait être de créer un curseur avec un fichier 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.

112
ghchinoy

Utilisez un SQLiteStatement .

par exemple.

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

  long count = s.simpleQueryForLong();
62
Teknogrebo

En supposant que vous ayez déjà établi une connexion à la base de données (db), je pense que le moyen le plus élégant est de vous 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
Eloi Navarro

Voir rawQuery (String, String []) et la documentation de Cursor

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

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

En outre, 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 });
    ...
}
22
Dre

comment obtenir la colonne de comptage

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 la plus précise. Pas besoin de gérer les curseurs et leur fermeture.

12
kontinuity

Si vous utilisez ContentProvider, 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
Beshoy Fayez

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 à vous échapper de la requête brute.

5

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

Comme

db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
5
Chirag
int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();
1
Antoine Luckenson