Erreur sous kotlin

Fermé
baptiste - Modifié le 26 sept. 2022 à 11:00
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 - 30 sept. 2022 à 08:41

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

9 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
26 sept. 2022 à 11:08

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)

0

ca ne fonctionne toujours pas

0

ah j'ai regarder du coté sql lite et enfaite la table users ne s'affiche pas 

0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
27 sept. 2022 à 08:37

Comment as-tu créé ta base ? 

0

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"
       


    }


}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
28 sept. 2022 à 09:25

Est-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


0

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

0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
28 sept. 2022 à 17:22

Toujours la même erreur ?

Lorsque tu déploies ton app, tu prends bien l'habitude de supprimer l'ancienne version lorsque tu touches à la base ?

0

comment ça ?

0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
29 sept. 2022 à 09:44

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

0

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 ! 

0

ah mince faut espoir ca a marcher pour se connecter mais ducoup pour ajouter un post ca crash c'est tres bizarre ...

0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 3 897
30 sept. 2022 à 08:41

Regardes les logs, ça va t'aider pour résoudre le crash...

0