IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Erreur SQLite : No Such Column


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut Erreur SQLite : No Such Column
    Bonsoir,

    j'ai un problème avec SQLite au niveau d'une requête.

    Voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public Cursor selectObs(String obs)
        {
     
        	String Query = "SELECT nom, espece, description" +
    				" FROM " + DBHelper.TABLE_OBSERVATIONS+
    				" WHERE nom LIKE " + obs ;
     
        	Cursor mCursor = ExecuteQuery(Query, null);
     
        	return mCursor;
    et la structure de la table pour donner une idée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private static final String CREATE_BDD = "CREATE TABLE " + TABLE_OBSERVATIONS + " (" +
    			"nom TEXT,"+
    			"espece TEXT NOT NULL, "+
    			"description TEXT NOT NULL, "+
    			"image TEXT NOT NULL, " +
    			"latitude REAL NOT NULL, " +
    			"longitude REAL NOT NULL);";
    appellée par ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    String obs = recherche.getText().toString();
        	db = new DBAdapter(getApplicationContext());
        	try
        	{
        	resultatRecherche = db.selectObs(obs);
        	}
        	//nombreObs = db.compteElements();
        	catch (Exception e)
        	{
        		Log.e("Noresi","Erreur", e);
        	}
    et voici le log d'erreur :

    06-05 21:16:43.375: E/Noresi(1854): Erreur
    06-05 21:16:43.375: E/Noresi(1854): android.database.sqlite.SQLiteException: no such column: sanglier: , while compiling: SELECT nom, espece, description FROM table_observation WHERE nom LIKE sanglier
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
    06-05 21:16:43.375: E/Noresi(1854): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
    06-05 21:16:43.375: E/Noresi(1854): at noresi.inter.DBAdapter.ExecuteQuery(DBAdapter.java:51)
    06-05 21:16:43.375: E/Noresi(1854): at noresi.inter.DBAdapter.selectObs(DBAdapter.java:105)
    06-05 21:16:43.375: E/Noresi(1854): at noresi.inter.Ecran_rechercher.recherche(Ecran_rechercher.java:121)
    06-05 21:16:43.375: E/Noresi(1854): at noresi.inter.Ecran_rechercher$4.onClick(Ecran_rechercher.java:100)
    06-05 21:16:43.375: E/Noresi(1854): at android.view.View.performClick(View.java:3511)
    06-05 21:16:43.375: E/Noresi(1854): at android.view.View$PerformClick.run(View.java:14105)
    06-05 21:16:43.375: E/Noresi(1854): at android.os.Handler.handleCallback(Handler.java:605)
    06-05 21:16:43.375: E/Noresi(1854): at android.os.Handler.dispatchMessage(Handler.java:92)
    06-05 21:16:43.375: E/Noresi(1854): at android.os.Looper.loop(Looper.java:137)
    06-05 21:16:43.375: E/Noresi(1854): at android.app.ActivityThread.main(ActivityThread.java:4424)
    06-05 21:16:43.375: E/Noresi(1854): at java.lang.reflect.Method.invokeNative(Native Method)
    06-05 21:16:43.375: E/Noresi(1854): at java.lang.reflect.Method.invoke(Method.java:511)
    06-05 21:16:43.375: E/Noresi(1854): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    06-05 21:16:43.375: E/Noresi(1854): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    06-05 21:16:43.375: E/Noresi(1854): at dalvik.system.NativeStart.main(Native Method)

    Je ne comprends même pas qu'une telle erreur puisse arriver. No such column ? Alors que j'ai enregistré une observation dont le nom est sanglier juste avant...

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Simplement car sanglier a été détecté comme une table et non une variable String.
    Voilà la correction (ajouter des simple quote de part et d'autre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String Query = "SELECT nom, espece, description" +
    				" FROM " + DBHelper.TABLE_OBSERVATIONS+
    				" WHERE nom LIKE '" + obs +"'" ;

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Non....

    Voila la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private static final String SELECT_QUERY = 
        "SELECT nom, espece, description" +
        " FROM " + DBHelper.TABLE_OBSERVATIONS+
        " WHERE nom LIKE ?";
     
     
    ...
     
    public Cursor selectObs(String obs)
    {
        	return database.rawSql(SELECT_QUERY, obs); // <= ou un truc du genre
    }
    La construction des paramètres n'est pas quelque chose à faire soit-même, sinon, quid d'un paramètre tel que:
    "' or (XXXXXX) or (name = '"
    et voila le code XXXXXXX executé par SQL !


    Notez aussi qu'en Java:
    * Les membres & locales (variables locales, fonctions, paramètres, valeurs membres) commencent par une minuscule. Mais utiliser "mMyVariable" fait penser illico penser à une valeur membre de la classe.
    * Seuls les types (enum, classes, interfaces) commencent par une majuscule.
    * Exception, les objets statiques peuvent être tout en majuscule.

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut
    Moi je l'aurais mis comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static Cursor selectObs(String obs)
    {
        	return database.rawQuery(
        	    	 " SELECT nom, espece, description " +
                     " FROM sanglier " +
                     " WHERE nom LIKE ? ",
                     new String[]{ obs });
    }
    Mais bon c'est du détail.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Hmmm, merci pour vos conseils.

    J'ai par contre une erreur :

    The method rawSql(String, String) is undefined for the type SQLDatabase
    au niveau de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static Cursor selectObs(String obs)
        {
        	return db.rawSql(SELECT_QUERY, obs);
     
        }
    ma variable db :*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private static SQLiteDatabase db;
    Une idée ?
    Merci

  6. #6
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 246
    Par défaut
    Oui la méthode s'appelle rawQuery et pas rawSql désolé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur sqlite : no such column :
    Par kracels dans le forum Android
    Réponses: 1
    Dernier message: 30/07/2012, 02h45
  2. Erreur : Data truncated for column
    Par mercure07 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/12/2008, 10h20
  3. message d'erreur "1170 - BLOB/TEXT column"
    Par kindaelias dans le forum MySQL
    Réponses: 1
    Dernier message: 11/08/2008, 19h06
  4. Réponses: 4
    Dernier message: 19/04/2007, 22h37
  5. Réponses: 5
    Dernier message: 12/12/2005, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo