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 :

SQLite & Android


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 18
    Points
    18
    Par défaut SQLite & Android
    Bonjour à tous et bonne année ,

    Je reviens une nouvelle fois vers vous car après avoir tenter plein de choses (+ ou - farfelues parfois ) depuis ce matin, je reste bloqué.

    En fait j'ai créé une bdd "divert.bd" puis une table "divertissement" et tout marche...
    Jusque là, pas de problèmes.

    J'ai ensuite ajouté une table "commentaires" a ma bdd "divert.bd" sur le même shema que la 1ere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //la table commentaires:
    		db.execSQL("CREATE TABLE " + SQLITE_TABLE_COMMS + " ( " + KEY_ID_COMM + " INTEGER PRIMARY KEY AUTOINCREMENT," 
    				+ KEY_ID_DIVERT + " TEXT NOT NULL," 
    				+ KEY_LE_COMM + " TEXT NOT NULL,"  
    				+ KEY_LA_NOTE + " TEXT NOT NULL);");
    Seulement, quand je souhaite y accéder, j'ai un nullpointerException sur un champ qui ne se trouve pas dans le curseur!
    j'ai bien listé les champs dudit curseur avec Log.v sur les elements de cursor.getColumnsNames et il contient bien les champs que j'attend.

    voici le code que j'utilise pour l'affichage (qui marche si je requete sur la 1ere table :s)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Cursor cursor = bdd.getTousLesComms();
     
    	Log.v("tag","nb_col : "+cursor.getColumnCount());	
    	for(String e : cursor.getColumnNames() ){
    		Log.v("tag","col_names : "+e);
    	}
     
    	// les champs de la BDD a afficher
    	String[] columns = new String[] { BDD.KEY_DESCRIPTION/*, BDD.KEY_NOM, BDD.KEY_PAYS*/ };
     
    	int[] to = new int[] { R.id.commentaire/*, R.id.nom, R.id.pays */};
     
    	// creation de l'adapter
    	SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.comms_info, cursor, columns, to, 0);
    // on recupere la liste et on lui affecte l'adapter
    	ListView listComms = (ListView) findViewById(R.id.listComms);
    	listComms.setAdapter(adapter);
    l'erreur indique "column "_id" doesn't exist" alors que ma table commentaires n'en contient pas (l'id étant designé par "id_comm")

    Je pense donc que le problème vient du fait que la table commentaire n'est pas bien crée dans ma table MAIS je ne sais pas comment verifier cela puisque je n'ai pas accés au ficher ".db" (l'emulateur n'étant pas rootable)

    voici donc mes questions:
    - comment peux t'on s'assurer qu'une table a bien été crée dans la bdd?
    - peux t'on lister/afficher le contenu d'une table depuis le code android?

    Ou si jamais vous trouvez une erreur dans mon code...
    parce que là j'avoue que je desespere un peu

    D'avance merci,
    Geoffrey.

    EDIT : bon la table est bien créée car même si je n'arrive pas à l'afficher avec l'adapter, la methode d'ajout en base marche bien (la methode bd.insert(...) retourne bien l'id de la ligne ajoutée et il est incrémenté a chaque utilisation)

    je poste ci dessous l'erreur au cas ou :s
    01-03 16:56:26.747: E/AndroidRuntime(1666): FATAL EXCEPTION: main
    01-03 16:56:26.747: E/AndroidRuntime(1666): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gob.movurbuddies/com.gob.movurbuddies.F2_FicheDescriptive_Activity}: java.lang.IllegalArgumentException: column '_id' does not exist
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.os.Handler.dispatchMessage(Handler.java:99)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.os.Looper.loop(Looper.java:123)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread.main(ActivityThread.java:4627)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at java.lang.reflect.Method.invokeNative(Native Method)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at java.lang.reflect.Method.invoke(Method.java:521)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at dalvik.system.NativeStart.main(Native Method)
    01-03 16:56:26.747: E/AndroidRuntime(1666): Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.support.v4.widget.CursorAdapter.init(CursorAdapter.java:174)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.support.v4.widget.CursorAdapter.<init>(CursorAdapter.java:151)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.support.v4.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:93)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:89)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at com.gob.movurbuddies.F2_FicheDescriptive_Activity.displayListView(F2_FicheDescriptive_Activity.java:121)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at com.gob.movurbuddies.F2_FicheDescriptive_Activity.onStart(F2_FicheDescriptive_Activity.java:100)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.Activity.performStart(Activity.java:3781)
    01-03 16:56:26.747: E/AndroidRuntime(1666): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
    01-03 16:56:26.747: E/AndroidRuntime(1666): ... 11 more

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    trouvé...

    en fait, CHAQUE table DOIT avoir un champ nommé "_id" pour son id...

  3. #3
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non...

    En fait... SimpleCursorAdapter utilise la colonne "_ID" comme identifiant... elle doit être fournie par le cursor...

    La table n'a rien à voir la dedans... ca pourrait être (en SQLite par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select _ROWID_ as _ID, XXXXX, YYYYYY from TTTTTTT;
    la table n'a pas de colonne '_ID' mais comme en SQLite toutes les tables ont une colonne _ROWID_ ca marche...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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

Discussions similaires

  1. Comment utiliser SQLite sous Android
    Par Djug dans le forum Android
    Réponses: 7
    Dernier message: 09/06/2015, 21h37
  2. creation de base données sqlite sous android
    Par alex2011 dans le forum Android
    Réponses: 0
    Dernier message: 29/03/2011, 19h29
  3. creation de base données sqlite sous android
    Par alex2011 dans le forum Android
    Réponses: 2
    Dernier message: 28/03/2011, 17h41
  4. exeptions Sqlite sous Android
    Par Jcpan dans le forum Android
    Réponses: 1
    Dernier message: 11/10/2010, 13h00

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