Erreur sous kotlin

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

  1. Modérateur

    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
    1. ca ne fonctionne toujours pas

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

        0
        1. Modérateur

          Comment as-tu créé ta base ? 

          0
      2. 
        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
        1. Modérateur

          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
          1. 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
            1. Modérateur

              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
          2. comment ça ?

            0
            1. Modérateur

              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
          3. 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
            1. ah mince faut espoir ca a marcher pour se connecter mais ducoup pour ajouter un post ca crash c'est tres bizarre ...

              0
              1. Modérateur

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

                0