Ich versuche, ein einfaches Anmeldeformular zu erstellen, in dem ich die auf dem Anmeldebildschirm eingegebene Anmelde-ID und das Kennwort mit der in der Datenbank gespeicherten vergleiche.
Ich verwende die folgende Abfrage:
final String DATABASE_COMPARE =
"select count(*) from users where uname=" + loginname + "and pwd=" + loginpass + ");" ;
Das Problem ist, ich weiß nicht, wie ich die obige Abfrage ausführen und die zurückgegebene Anzahl speichern kann.
So sieht die Datenbanktabelle aus (ich habe es geschafft, die Datenbank erfolgreich mit der execSQl-Methode zu erstellen).
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);";
Kann mich jemand freundlich anleiten, wie ich dies erreichen kann? Wenn möglich, stellen Sie bitte ein Beispiel-Snippet zur Verfügung, um die oben genannte Aufgabe auszuführen.
SELECT COUNT(*)
und nichtqueryNumEntries()
abzurufen und zu sehen, wie viele es gibt, d. H.cursor.getCount()
@scottyab Die parametrisierten DatabaseUtils.queryNumEntries (db, table, whereparams) sind in API 11 + vorhanden, die ohne die whereparams seit API 1 . Die Antwort müsste darin bestehen, einen Cursor mit einer db.rawQuery zu erstellen:
Ich mag auch die Antwort von @ Dre mit der parametrisierten Abfrage.
quelle
mCount.getInt()
istcolumnindex
. Danke für die Hilfe!Verwenden Sie ein SQLiteStatement .
z.B
quelle
?
s in der Abfrage verwenden und dannbindString(int, String)
und verwendenbindLong(int, long)
, um die Werte einzufügen. Siehe hier .Siehe rawQuery (String, String []) und die Dokumentation zu Cursor
Ihre SQL-Anweisung DADABASE_COMPARE ist derzeit ungültig
loginname
undloginpass
wird nicht maskiert. Zwischenloginname
und steht kein Leerzeichenand
, und Sie beenden die Anweisung mit). anstatt ; - Wenn Sie sich als Bob mit dem Passwort des Passworts anmelden würden, würde diese Anweisung als endenAußerdem sollten Sie wahrscheinlich die Funktion selectionArgs verwenden, anstatt Loginname und Loginpass zu verketten.
Um selectionArgs zu verwenden, würden Sie so etwas tun
quelle
Angenommen, Sie haben bereits eine Database (
db
) -Verbindung hergestellt, ist es meiner Meinung nach am elegantesten, sich an dieCursor
Klasse zu halten und Folgendes zu tun:quelle
wie man eine Zählspalte bekommt
Dies ist die prägnanteste und präziseste Alternative. Keine Notwendigkeit, Cursor und deren Schließen zu behandeln.
quelle
Wenn Sie ContentProvider verwenden, können Sie Folgendes verwenden:
quelle
Ein anderer Weg wäre:
auf einem Cursor wie:
Wenn Sie daran denken können, von der Rohabfrage wegzukommen.
quelle
Wenn Sie die Anzahl der Datensätze erhalten möchten, müssen Sie die Gruppe in einem bestimmten Feld anwenden oder die folgende Abfrage anwenden.
Mögen
quelle
quelle