Das Problem mit Ihrem Code ist nicht dass Sie die Argumente als Integer übergeben (das tun Sie nicht), aber dass die Argumente nicht als TEXT
erkannt werden Literale, weil sie nicht in einfache Anführungszeichen eingeschlossen sind, sodass SQLite sie für Spaltennamen hält.
Die empfohlene Art, die Parameter an rawQuery()
zu übergeben ist das:
fun userPresent (user: String, pass: String): Boolean {
val db = writableDatabase
val query = "select * from $TABLE_NAME where username = ? and password = ?"
val cursor = db.rawQuery(query, arrayOf(user, pass))
val result = cursor.count > 0
cursor.close()
db.close()
return result
}
Die Platzhalter ?
nehmen ihre Werte aus den entsprechenden Elementen des Arrays, das als zweites Argument von rawQuery()
übergeben wird und Sie müssen die einfachen Anführungszeichen nicht verketten, um das Risiko einer SQL-Einschleusung zu vermeiden.
Danach und vor der return-Anweisung müssen Sie beide Cursor
schließen und die db
Objekt.