Erreur sous kotlin

baptiste -  
BunoCS Messages postés 5036 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

9 réponses

  1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     

    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
  2. baptiste
     

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

    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       

      Comment as-tu créé ta base ? 

      0
  3. baptiste
     
    
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     

    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
  6. baptiste
     

    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. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       

      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
  7. Baptiste
     

    comment ça ?

    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       

      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
  8. baptiste
     

    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
  9. baptiste
     

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

    0
    1. BunoCS Messages postés 5036 Date d'inscription   Statut Modérateur Dernière intervention   3 931
       

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

      0