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.
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});
@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.
Utilisez un SQLiteStatement .
par exemple.
SQLiteStatement s = mDb.compileStatement( "select count(*) from users where uname='" + loginname + "' and pwd='" + loginpass + "'; " );
long count = s.simpleQueryForLong();
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;
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 });
...
}
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.
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);
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.
Si vous voulez obtenir le nombre d'enregistrements, vous devez appliquer le groupe sur un champ ou appliquer la requête ci-dessous.
db.rawQuery("select count(field) as count_record from tablename where field =" + condition, null);
int nombr = 0;
Cursor cursor = sqlDatabase.rawQuery("SELECT column FROM table WHERE column = Value", null);
nombr = cursor.getCount();