J'essaie de créer un formulaire de connexion simple, dans lequel je compare l'identifiant de connexion et le mot de passe saisis à 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 la base de données (j'ai réussi à 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 gentiment me guider sur la manière dont je peux y parvenir? Si possible, veuillez fournir un exemple d'extrait pour effectuer la tâche ci-dessus.
SELECT COUNT(*)
etqueryNumEntries()
sur récupérer tous les enregistrements et voir combien il y en a, c'est-à-dire.cursor.getCount()
@scottyab le DatabaseUtils.queryNumEntries paramétré (db, table, whereparams) existe à l'API 11 +, celui sans les paramètres de localisation existe depuis l'API 1 . La réponse devrait être la création d'un curseur avec un db.rawQuery:
J'aime aussi la réponse de @ Dre, avec la requête paramétrée.
la source
mCount.getInt()
estcolumnindex
. Merci pour l'aide!Utilisez un SQLiteStatement .
par exemple
la source
?
s dans la requête, puis utiliserbindString(int, String)
etbindLong(int, long)
pour insérer les valeurs. Regardez ici .Voir rawQuery (String, String []) et la documentation pour Cursor
Votre instruction SQL DADABASE_COMPARE est actuellement invalide
loginname
etloginpass
ne sera pas échappée, il n'y a pas d'espace entreloginname
et leand
, et vous terminez l'instruction par); au lieu de ; - Si vous vous connectez en tant que bob avec le mot de passe du mot de passe, cette déclaration se terminerait parDe plus, vous devriez probablement utiliser la fonction selectionArgs, au lieu de concaténer loginname et loginpass.
Pour utiliser selectionArgs, vous feriez quelque chose comme
la source
En supposant que vous ayez déjà une
db
connexion Database ( ) établie, je pense que le moyen le plus élégant est de s'en tenir à laCursor
classe et de faire quelque chose comme:la source
comment obtenir la colonne count
C'est l'alternative la plus concise et la plus précise. Pas besoin de manipuler les curseurs et leur fermeture.
la source
Si vous utilisez ContentProvider, vous pouvez utiliser:
la source
Une autre façon serait d'utiliser:
sur un curseur comme:
Si vous pouvez penser à vous éloigner de la requête brute.
la source
Si vous souhaitez obtenir le nombre d'enregistrements, vous devez appliquer le groupe par sur un champ ou appliquer la requête ci-dessous.
Comme
la source
la source