Erreur sous kotlin
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai une erreur qui apparait sur android studio sous kotlin
android.database.sqlite.SQLiteException: no such table: users (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM users WHERE email = ? and password = ?
fun findUser(email : String, password : String) : Boolean? {
var user : Boolean? = false
val db = this.readableDatabase
val selectionArgs = arrayOf(email, password)
val cursor = db.query(USERS_TABLE_NAME, null , "$EMAIL = ? and $PASSWORD = ?", selectionArgs,null,null,null)
if (cursor.moveToFirst()){
return user
}
db.close()
return null
}
Windows / Chrome 105.0.0.0
- Erreur sous kotlin
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- Java code erreur 1603 ✓ - Forum Windows
9 réponses
Hello,
Ta requête SQL est mal formattée. Il faudrait plutôt faire quelque chose du genre, en supposant que EMAIL et PASSWORD soient le nom de tes colonnes
val cursor = db.query(USERS_TABLE_NAME, null , "EMAIL = ? and PASSWORD = ?", selectionArgs,null,null,null)
class facebookDatabase(mContext: Context) : SQLiteOpenHelper (
mContext,
DB_NAME,
null,
DB_VERSION
){
override fun onCreate(db: SQLiteDatabase?) {
//creation des tables
val createTableUser = """
CREATE TABLE $USERS_TABLE_NAME(
$USERS_ID integer PRIMARY KEY,
$NAME varchar(50),
$EMAIL varchar(100),
$PASSWORD varchar(20)
)
""".trimIndent()
db?.execSQL(createTablePosts)
}
// cette méthode permet de vérifier si la table existe déjà
override fun onUpgrade(db: SQLiteDatabase?, oldVersion : Int, newVersion: Int) {
db?.execSQL("DROP TABLE IF EXISTS $USERS_TABLE_NAME")
onCreate(db)
}
fun findUser(email : String, password : String) : Boolean? {
var user : Boolean? = false
val db = this.readableDatabase
val selectionArgs = arrayOf(email, password)
var cursor = db.query(USERS_TABLE_NAME, null , "$EMAIL = ? and $PASSWORD = ?", selectionArgs,null,null,null)
if (cursor.moveToFirst()){
return user
}
db.close()
return null
}
companion object {
private val DB_NAME = "facebook_db"
private val DB_VERSION = 1
// users
private val USERS_TABLE_NAME = "users"
private val USERS_ID = "id"
private val NAME = "name"
private val EMAIL = "email"
private val PASSWORD = "password"
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionEst-ce que tu créé bien ta base ? Autrement dit, est-ce que le constructeur est bien appelé quelque part ?
Attention, tu as des erreurs dans ton onCreate():
- varchar n'est pas supporté par SQLite
- tu définis une variable createTableUser mais tu exécute createTablePosts ?
override fun onCreate(db: SQLiteDatabase?) {
//creation des tables
val createTableUser = """
CREATE TABLE $USERS_TABLE_NAME(
$USERS_ID INTEGER PRIMARY KEY,
$NAME TEXT,
$EMAIL TEXT,
$PASSWORD TEXT
)
""".trimIndent()
db?.execSQL(createTableUser)
}
Sinon, je te conseille de passer par Room, c'est moins archaïque que d'utiliser SQLiteOpenHelper:
https://developer.android.com/training/data-storage/room
bonjour merci pour votre reponse
en faite j'ai créer une aute table avec le post et j'ai supprimer ca pour vous mais je me suis tromper bref
j'ai changer le varchar en text et sinon ca ne fonctionne toujours pas
Lorsque tu modifies ta base de données, il est très courant que, lors du mise à jour d'app (ou durant les dev), l'app crash parce que les anciennes tables ne correspondent pas avec les nouvelles. 2 solutions:
- si l'app est en prod, il faut fournir des scripts de migration qui sont gérés dans la méthode onUpgrade(). On peut aussi exécuter un DROP TABLES si on est sûr du comportement
- durant les dev, pour ne pas s'embêter avec les migrations, il faut désinstaller l'ancienne version avant d'installer la nouvelle
ok merci beaucoup j'ai trouver le problème grâce a votre réponse c'était assez bête en faite
mais je débute en tout cas merci pour le temps que vous m'avez accorder
pour le problème c'est tout simplement la version de la database que j'avas changer car je regarder une formation et j'amais mis sa version
merci encore !