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 :

Problème SQLite Insert


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut Problème SQLite Insert
    Bonjour ,

    J'ai un soucis avec ma base de donnée , je cherche à faire une base de donnée , contenant deux tables , une table exercice :
    – id : entier, auto incrémenté et clé primaire
    – name : string, nom de l’exercice
    et une table score :
    – id_exercice : entier, clé étrangère
    – value : entier
    – date : date et heure d’obtention du score

    Hors lorsque j'applique mon code , j'ai le premier insert pour le nom de l'exercice qui fonctionne bien ainsi que le ID , mais pour le Insert du score ça ne fonctionne pas. Et petite question secondaire , comment je peux récupérer la date est l'heure , et quelle est le type de champ (String , format date ? ) dans la base de donnée pour là stocker.

    PS: je ne suis pas sûr de la syntaxe du Insert pour la clé étrangère de la table score ...

    Je vous joins les logs + une partie de mon code :

    Voici les logs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    11-20 13:38:14.551: E/SQLiteDatabase(721): Error inserting SCORE=20
    11-20 13:38:14.551: E/SQLiteDatabase(721): android.database.sqlite.SQLiteException: no such table: table_score: , while compiling: INSERT INTO table_score(SCORE) VALUES (?)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:253)
    11-20 13:38:14.551: E/SQLiteDatabase(721): 	at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:111)
    Voici mon code :

    DataBase :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    package com.example.testbase2;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
     
    public class MyDatebase extends SQLiteOpenHelper {
     
    	private static final String TABLE_EXERCICE = "table_exercices";
    	private static final String COL_ID = "ID";
    	private static final String COL_NOM_EXERCICE = "Exercice1";
     
    	private static final String TABLE_SCORE = "table_score";
    	private static final String COL_ID_SCORE = "ID_SCORE";
    	private static final int VALUE = 0;
     
    	private static final String CREATE_BDD = "CREATE TABLE " + TABLE_EXERCICE + " ("
    	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_NOM_EXERCICE + " TEXT NOT NULL);";
     
    	private static final String CREATE_BDD2 = "CREATE TABLE " + TABLE_SCORE + " ("
    	+ COL_ID_SCORE + " FOREIGN KEY "+ COL_ID +" REFERENCES, "+ TABLE_EXERCICE + VALUE + "TEXT NOT NULL);";
     
    	public MyDatebase(Context context, String name, CursorFactory factory, int version) {
    		super(context, name, factory, version);
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		//on crée la table à partir de la requête écrite dans la variable CREATE_BDD
    		db.execSQL(CREATE_BDD);
    		db.execSQL(CREATE_BDD2);
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		//On peut faire ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer
    		//comme ça lorsque je change la version les id repartent de 0
    		db.execSQL("DROP TABLE " + TABLE_EXERCICE + ";");
    		db.execSQL("DROP TABLE " + TABLE_SCORE + ";");
    		onCreate(db);
    	}
     
    }

    ExercicesBDD :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    package com.example.testbase2;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
    public class ExercicesBDD {
     
    	private static final int VERSION_BDD = 1;
    	private static final String NOM_BDD = "exercices1.db";
     
    	private static final String TABLE_EXERCICE = "table_exercices";
    	private static final String TABLE_SCORE = "table_score";
    	private static final int NUM_COL_ID_SCORE = 0;
    	private static final String COL_ID_SCORE = "ID_SCORE";
    	private static final int NUM_COL_SCORE = 1;
    	private static final String COL_NOM_SCORE = "SCORE";
    	private static final int VALUE = 0;
     
    	private static final String COL_ID = "ID";
    	private static final int NUM_COL_ID = 0;
    	private static final String COL_NOM_EXERCICE = "Exercice1";
    	private static final int NUM_COL_TITRE = 1;
     
    	private SQLiteDatabase bdd;
     
    	private MyDatebase maBaseSQLite;
     
    	public ExercicesBDD(Context context){
    		//On crée la BDD et sa table
    		maBaseSQLite = new MyDatebase(context, NOM_BDD, null, VERSION_BDD);
    	}
     
    	public void open(){
    		//on ouvre la BDD en écriture
    		bdd = maBaseSQLite.getWritableDatabase();
    	}
     
    	public void close(){
    		//on ferme l'accès à la BDD
    		bdd.close();
    	}
     
    	public SQLiteDatabase getBDD(){
    		return bdd;
    	}
     
    	public long insertExercice(Exercice exercice){
    		//Création d'un ContentValues (fonctionne comme une HashMap)
    		ContentValues values = new ContentValues();
    		//on lui ajoute une valeur associée à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
    		values.put(COL_NOM_EXERCICE, exercice.getTitre());
    		System.out.println("insertion du nom d'exercice en base");
    		//on insère l'objet dans la BDD via le ContentValues
     
    		return bdd.insert(TABLE_EXERCICE, null, values);
    	}
     
    	public long insertExercice2(Exercice exercice){
    		ContentValues values2 = new ContentValues();
    		values2.put(COL_NOM_SCORE, exercice.getValue());
    		System.out.println("insertion du score en base");
    		return bdd.insert(TABLE_SCORE, null, values2);
    	}
     
    	public int updateExercice(int id, Exercice exercice){
    		//La mise à jour de l'exercice dans la BDD fonctionne plus ou moins comme une insertion
    		//il faut simplement préciser quel exercice on doit mettre à jour grâce à l'ID
    		ContentValues values = new ContentValues();
    		values.put(COL_NOM_EXERCICE, exercice.getTitre());
    		return bdd.update(TABLE_EXERCICE, values, COL_ID + " = " +id, null);
    	}
     
    	public int removeExerciceWithID(int id){
    		//Suppression d'un exercice de la BDD grâce à l'ID
    		return bdd.delete(TABLE_EXERCICE, COL_ID + " = " +id, null);
    	}
     
    	public Exercice getExerciceWithNom(String titre){
    		//Récupère dans un Cursor les valeurs correspondant à un exercice contenu dans la BDD (ici on sélectionne l'exercice grâce à son titre)
    		Cursor c = bdd.query(TABLE_EXERCICE, new String[] {COL_ID, COL_NOM_EXERCICE}, COL_NOM_EXERCICE + " LIKE \"" + titre +"\"", null, null, null, null);
    		return cursorToLivre(c);
    	}
     
    	//Cette méthode permet de convertir un cursor en un exercice
    	private Exercice cursorToLivre(Cursor c){
    		//si aucun élément n'a été retourné dans la requête, on renvoie null
    		if (c.getCount() == 0)
    			return null;
     
    		//Sinon on se place sur le premier élément
    		c.moveToFirst();
    		//On créé un exercice
    		Exercice exercice = new Exercice();
    		//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
    		exercice.setId(c.getInt(NUM_COL_ID));
    		exercice.setNom(c.getString(NUM_COL_TITRE));
    		exercice.setValue(c.getInt(NUM_COL_SCORE));
    		//On ferme le cursor
    		c.close();
     
    		//On retourne l'exercice
    		return exercice;
    	}
    }

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,

    no such table: table_score
    Ta table existe bien à mon avis. Par contre, cette table contient qu'un seul champ qui est ID_SCORE. Tu ne parle jamais de la colonne SCORE dans la création de ta table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private static final String CREATE_BDD2 = "CREATE TABLE " + TABLE_SCORE + " ("
    	+ COL_ID_SCORE + " FOREIGN KEY "+ COL_ID +" REFERENCES, "+ TABLE_EXERCICE + VALUE + "TEXT NOT NULL);";
    Aussi, tu as certainement des erreurs de syntaxe dans tes requêtes SQL.


    Affiches tes requêtes lors de ces exécutions et on verra bien

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Salut et merci pour te réponse , la colonne score est bien là , le champ qui contient la valeur du score à pour nom "value" et un ID_score. Donc je ne comprends pas pourquoi ça ne passe pas.

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    j'ai essayer en faisant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	private static final String CREATE_BDD = 
    	"CREATE TABLE " + TABLE_EXERCICE + 
    	" ("+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    		+ COL_NOM_EXERCICE + " TEXT NOT NULL);";
     
    //requete posant probleme ...
     
    	private static final String CREATE_BDD2 = 
    	"CREATE TABLE " + TABLE_SCORE + 
    	" ("+ COL_ID_SCORE + " FOREIGN KEY ("+COL_ID_SCORE+") REFERENCES "+ TABLE_EXERCICE +" ("+COL_NOM_SCORE+") + "+VALUE+" + INTEGER);";
    J'ai toujours une erreur sur le Insert Score pouvez vous me dire si je ne respect pas la syntaxe svp

  5. #5
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Effectivement ta table table_score n'existait pas car elle n'etait pas créée.

    Simplement par ce que ton col_id_score n'etait pas un champ dans la table table_score...

    Essaye de bien placer les guillemments à leur place...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "CREATE TABLE  TABLE_SCORE  (
    COL_ID_SCORE INTEGER,
    VALUE   INTEGER,
    FOREIGN KEY (COL_ID_SCORE) REFERENCES  TABLE_EXERCICE (COL_NOM_SCORE))";

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Je ne comprends pas pourquoi tu mets en reference le COL_NOM_SCORE , pourquoi pas mettre le COL_ID_SCORE à la place ?

  7. #7
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Regarde bien,

    J'ai juste ordonnée ce que tu as ecrit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private static final String CREATE_BDD2 = 
    	"CREATE TABLE " + TABLE_SCORE + 
    	" ("+ COL_ID_SCORE + " FOREIGN KEY ("+COL_ID_SCORE+") REFERENCES "+ TABLE_EXERCICE +" ("+COL_NOM_SCORE+") + "+VALUE+" + INTEGER);";
    par

    Le champ COL_NOM_SCORE reste bien à sa place comme tu l'avais fait. Je ne connais pas malheureusement la structure et l'idée qui se trouve derriere la table....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "CREATE TABLE  TABLE_SCORE  (
    COL_ID_SCORE INTEGER,
    VALUE   INTEGER,
    FOREIGN KEY (COL_ID_SCORE) REFERENCES  TABLE_EXERCICE (COL_NOM_SCORE))";

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "CREATE TABLE" + TABLE_SCORE + "("+
    	COL_ID_SCORE +"INTEGER,"+
    	VALUE +" INTEGER,"+
    	"FOREIGN KEY (COL_ID_SCORE) REFERENCES  TABLE_EXERCICE (COL_NOM_SCORE))";
    La syntaxe avec guillemet est celle-ci je pense , j'ai testé j'ai toujours l'erreur INSERT

    j'vais essayer d'extraire via un nouveau projet car je suspect le changement de version qui foire comme j'ai pas mal galéré sur la base ça se peut qu'elle soit un peu pollué . S'ont cherché compliqué nan pêche pour gérer une base en java. C'est abusé.

  9. #9
    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
    COL_ID_SCORE +"INTEGER,"+

    Manque certainement quelque chose là !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    il manque un autoincrement ? mais en fait je me demande si ça serait pas plus simple si quelqu'un m'expliquer le principe du FOREIN car je sais bien ajouté un élément dans ma base quand c une clé basique primaire , mais c'est pour la requete clé etrangère je ne sais pas sur quoi je dois faire la liaison etc ... c'est là que je me perds .

    Je sais et vous pouvez me dire si je me trompe :

    - une clé étrangère doit etre en liaison avec un type de donnée unique (qui n'a aucune chance d'être deux fois identique)

    - Maintenant est ce que je peux juste lier l'id de ma premiere table avec ma seconde via le forain , si oui comment ? Si non , pourquoi ?

  11. #11
    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, c'est un espace qu'il manque
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    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
    Sinon... pour les foreign keys:

    create table TABLE_MAITRE (
    _ID INTEGER PRIMARY KEY AUTOINCREMENT ,
    DATA1 TEXT NOT NULL
    DATA2 INTEGER
    );

    create table TABLE_CHILD (
    _ID INTEGER PRIMARY KEY AUTOINCREMENT ,
    MASTER_ID INTEGER NOT NULL,
    DATA1 TEXT NOT NULL,
    FOREIGN KEY (MASTER_ID) REFERENCES TABLE_MAITRE (_ID)
    );

    A noter que c'est juste une "vérification" au niveau de la base (celle ci refusera la destruction d'un objet TABLE_MAITRE référéencé, ou l'insertion d'un TABLE_CHILD vers un TABLE_MAITRE non existant). Les colonnes INTEGER PRIMARY KEY devenant des mappings sur ROWID, on recoit celles ci dans les insert.... donc insérer un 'maitre' et X 'child' est facile:
    INSERT INTO TABLE_MAITRE (DATA1,DATA2) values (....);
    va renvoyer la colonne _ID de TABLE_MAITRE (maitreID)
    INSERT INTO TABLE_CHILD (MASTER_ID,DATA1) values (maitreID,...)
    va insérer un 'child' qui pointe sur l'objet maitre inséré, et renvoyer la colonne _ID du child inséré.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Ok donc je suis obligé de créer un MASTER_ID dans le child qui sert de "lien" entre les tables si j'ai bien comprit , et donc le _ID de la table MAITRE et le _ID de la table CHILD , c'est le même en réalité ? ou du moins ils s'incrémentent en même temps.

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    db.execSQL ("CREATE TABLE table_exercice ("
    + "id INTEGER PRIMARY KEY AUTOINCREMENT ,"
    + " name TEXT NOT NULL );");

    db.execSQL (" CREATE TABLE table_score ("
    + "id INTEGER PRIMARY KEY AUTOINCREMENT ,"
    + "id_exercice INTEGER NOT NULL ,"
    + "value INTEGER NOT NULL ,"
    + "date TEXT NOT NULL ,"
    + "FOREIGN KEY (id_exercice) REFERENCES table_exercice(id);");
    }

    J'ai corrigé l'histoire qu'en penses tu ?

  15. #15
    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
    Citation Envoyé par linuxien_62 Voir le message
    Ok donc je suis obligé de créer un MASTER_ID dans le child qui sert de "lien" entre les tables si j'ai bien comprit
    Tu as bien compris

    et donc le _ID de la table MAITRE et le _ID de la table CHILD , c'est le même en réalité ? ou du moins ils s'incrémentent en même temps.
    Non, le _ID de maitre est l'identifiant unique d'un MAITRE
    Le _ID de child est l'identifiant unique d'un CHILD.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  16. #16
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Ok , bon me reste un soucis . J'ai apparemment un conflit dans la base de donnée.

    Class GestionBaseDonnee :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    public class GestionBaseDonnee {
     
    	//creation de la variable base de donnee
    	private SQLiteDatabase bdd;
     
    	//creation de la variable de classe maBase contenant la creation des tables
    	private MaBase maBase;
     
    	public GestionBaseDonnee(Context context) {		
    		//creation de la base de donnée
    		maBase = new MaBase(context, "exercice.db", null, 1);
    		System.out.println("création de la base exercice.db");
    	}
     
    	//methode ouverture base en ecriture
    	public void ouvrirBaseDeDonneeModeEcriture(){
    		//definition de la base afin de l'ouvrir en ecriture
    		bdd = maBase.getWritableDatabase();
    		System.out.println("ouverture de la base de donnée mode ecriture");
    	}
     
    	//methode ouverture base en lecture
    	public void ouvrirBaseDeDonneeModeLecture(){
    		//definition de la base afin de l'ouvrir en lecture
    		bdd = maBase.getReadableDatabase();
    		System.out.println("ouverture de la base de donnée mode lecture");
    	}
     
    	//methode fermeture de la base
    	public void fermerLaBase(){
    		bdd.close();
    		System.out.println("fermeture de la base");
    	}
     
    	//methode ajout du nom de l'exercice
    	public void ajout_donnee(Exercice exercice){
    		String nomExercice = exercice.getTitre();
    		ContentValues values = new ContentValues ();
    		values.put ("name" , nomExercice );
    		bdd.insert ("table_exercice" , null , values );
    		System.out.println("ajout des données nom exercice dans la base");
    	}
     
    	//methode ajout du score de l'exercice
    	public void ajout_donnee2(Exercice exercice){
    		int score = exercice.getValue();
    		String date = exercice.getDate();
     
    		ContentValues values = new ContentValues();
    		values.put("value", score);
    		values.put("date", date);
    		bdd.insert("table_score", null, values);
    		System.out.println("ajout des données de score des exercices dans la base");
    	}

    Ma class exercice :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    package com.example.base_de_donnee2;
     
    import java.util.Calendar;
     
    public class Exercice {
    	private int id;
    	private String nom;
    	private int value;
    	private String date;
     
    	public Exercice(){}
     
    	public Exercice(String titre , int score){
    		this.nom = titre;
    		this.value = score;
    		Calendar cal = Calendar.getInstance();
    		date = cal.get(Calendar.DAY_OF_MONTH)+". "+cal.get(Calendar.NOVEMBER)+".2012 "+cal.get(Calendar.HOUR_OF_DAY)+"h "+cal.get(Calendar.MINUTE)+"m et "+cal.get(Calendar.SECOND)+"s";
    		System.out.println(cal.get(Calendar.DAY_OF_MONTH)+". "+cal.get(Calendar.NOVEMBER)+".2012 "+cal.get(Calendar.HOUR_OF_DAY)+"h "+cal.get(Calendar.MINUTE)+"m et "+cal.get(Calendar.SECOND)+"s");
     
    	}
     
    	public String getDate() {
    		return date;
    	}
     
    	public void setDate(String date) {
    		this.date = date;
    	}
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getTitre() {
    		return nom;
    	}
     
    	public void setNom(String titre) {
    		this.nom = titre;
    	}
     
    	public int getValue(){
    		return value;
    	}
     
    	public void setValue(int score){
    		this.value = score;
    	}
     
    	public String toString(){
    		return "ID : "+id+"\nNom Exercice : "+nom+"\n Score : "+value+"\n date : "+date;
    	}
    }
    Ma class MaBase :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package com.example.base_de_donnee2;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
     
     
    public class MaBase extends SQLiteOpenHelper {
    	public MaBase ( Context context , String name , CursorFactory factory ,int version ) {
    		super ( context , name , factory , version );
    	}
    	public void onCreate(SQLiteDatabase db) {
    		db.execSQL ("CREATE TABLE table_exercice  ("
    				+ "id  INTEGER   PRIMARY   KEY  AUTOINCREMENT ,"
    				+ " name   TEXT NOT NULL );");
     
    		db.execSQL (" CREATE   TABLE   table_score  ("
    				+ "id INTEGER PRIMARY KEY AUTOINCREMENT ,"
    				+ "id_exercice INTEGER NOT NULL ,"
    				+ "value INTEGER NOT NULL ,"
    				+ "date TEXT NOT NULL ,"
    				+ "FOREIGN KEY (id_exercice) REFERENCES table_exercice(id));");
    	}
     
    	public void onUpgrade ( SQLiteDatabase db , int oldVersion ,
    			int newVersion ) {
     
    	}
    }
    Et pour finir ma class Activité main :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package com.example.base_de_donnee2;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
     
    public class MainActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		 //Création d'une instance de ma classe GestionBaseDeDonnee
            GestionBaseDonnee exerciceBDD = new GestionBaseDonnee(getBaseContext());
     
            //Création d'un exercice
            Exercice exercice = new Exercice("Exercice1", 20);
     
            //On ouvre la base de données pour écrire dedans
            exerciceBDD.ouvrirBaseDeDonneeModeEcriture();
            //On insère l'exercice que l'on vient de créer
            exerciceBDD.ajout_donnee(exercice);
            exerciceBDD.ajout_donnee2(exercice);
     
            //on ferme la base de données
            exerciceBDD.fermerLaBase();
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;
    	}
     
    }
    Je récupére l'erreur suivante qui m'indique un conflit mais je ne sais pas d'où cela peut venir ... :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    11-26 20:57:42.383: I/System.out(382): création de la base exercice.db
    11-26 20:57:42.391: I/System.out(382): 26. 8.2012 20h 57m et 42s
    11-26 20:57:42.481: I/System.out(382): ouverture de la base de donnée mode ecriture
    11-26 20:57:42.491: I/System.out(382): ajout des données nom exercice dans la base
    11-26 20:57:42.511: E/SQLiteDatabase(382): Error inserting value=20 date=26. 8.2012 20h 57m et 42s
    11-26 20:57:42.511: E/SQLiteDatabase(382): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:112)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1737)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1610)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at com.example.base_de_donnee2.GestionBaseDonnee.ajout_donnee2(GestionBaseDonnee.java:60)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at com.example.base_de_donnee2.MainActivity.onCreate(MainActivity.java:24)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.Activity.performCreate(Activity.java:4397)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.os.Looper.loop(Looper.java:132)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-26 20:57:42.511: E/SQLiteDatabase(382): 	at dalvik.system.NativeStart.main(Native Method)
    11-26 20:57:42.511: I/System.out(382): ajout des données de score des exercices dans la base
    11-26 20:57:42.521: I/System.out(382): fermeture de la base

  17. #17
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Bon je viens de comprendre ... Apparemment c'etait parce que je n'avais pas fait mention du ID qui n'etait pas autoincrémenté dans mon deuxieme insert ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	//methode ajout du score de l'exercice
    	public void ajout_donnee2(Exercice exercice){
    		System.out.println("ajout des données de score des exercices dans la base");
    		int score = exercice.getValue();
    		String date = exercice.getDate();
     
    		ContentValues values = new ContentValues();
    		values.put("id_exercice",1);  // <= j'ai rajouté ceci et ça passe. 
    		values.put("value", score);
    		values.put("date", date);
    		bdd.insert("table_score", null, values);
     
    	}
    Le fait de mettre en valeur fixe le id_exercice à 1 . Vous semble t'il être une erreur ? svp

  18. #18
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    Pour finir mon dernier soucis , est comment je fais fait pour afficher le contenu globale de mes tables ?

    j'ai tenté ceci :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    //methode d'affiche des données dans la base.
    	public void getExerciceWithNom(String name){
     
    		bdd = maBase.getWritableDatabase ();
    		String [] colomns = {"id","name"};
    		Cursor cursor = bdd.query ("table_exercice" , colomns , " name = " +name , null ,null , null , "name") ;
     
     
    		cursor.moveToFirst ();
    		do {
    			affichage.add(cursor.toString());
    		} while (cursor.moveToNext ());
    		cursor.close ();
     
    		if(affichage.isEmpty()){
    			System.out.println("la liste est vide et n'a rien à afficher");
    		}else{
    			int i = 0;
    			while (i < affichage.size()){
    				System.out.println("enregistrements table : "+affichage.get(i));
    				i++;
     
    			}
    		}
    	}
    et j'obtiens forcément une erreur ^^ :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    11-26 21:42:51.312: I/System.out(902): création de la base exercice.db
    11-26 21:42:51.321: I/System.out(902): 26. 9.2012 21h 42m et 51s
    11-26 21:42:51.441: I/System.out(902): ouverture de la base de donnée mode ecriture
    11-26 21:42:51.452: I/System.out(902): ajout des données nom exercice dans la base
    11-26 21:42:51.452: I/System.out(902): ajout des données de score des exercices dans la base
    11-26 21:42:51.471: I/SqliteDatabaseCpp(902): sqlite returned: error code = 1, msg = no such column: Exercice1, db=/data/data/com.example.base_de_donnee2/databases/exercice.db
    11-26 21:42:51.471: D/AndroidRuntime(902): Shutting down VM
    11-26 21:42:51.471: W/dalvikvm(902): threadid=1: thread exiting with uncaught exception (group=0x40014760)
    11-26 21:42:51.503: E/AndroidRuntime(902): FATAL EXCEPTION: main
    11-26 21:42:51.503: E/AndroidRuntime(902): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.base_de_donnee2/com.example.base_de_donnee2.MainActivity}: android.database.sqlite.SQLiteException: no such column: Exercice1: , while compiling: SELECT id, name FROM table_exercice WHERE  name = Exercice1 ORDER BY name
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.os.Looper.loop(Looper.java:132)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at dalvik.system.NativeStart.main(Native Method)
    11-26 21:42:51.503: E/AndroidRuntime(902): Caused by: android.database.sqlite.SQLiteException: no such column: Exercice1: , while compiling: SELECT id, name FROM table_exercice WHERE  name = Exercice1 ORDER BY name
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:146)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:367)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:130)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1539)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1419)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1375)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1455)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at com.example.base_de_donnee2.GestionBaseDonnee.getExerciceWithNom(GestionBaseDonnee.java:75)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at com.example.base_de_donnee2.MainActivity.onCreate(MainActivity.java:25)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.Activity.performCreate(Activity.java:4397)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    11-26 21:42:51.503: E/AndroidRuntime(902): 	... 11 more
    Merci encore pour votre aide les amis.

  19. #19
    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
    Cursor cursor = bdd.query ("table_exercice" , colomns , " name = ?", new String[] { name } ,null , null , "name") ;

    La query est:

    select {columns} from table_exercice where name=? order by name
    avec 1 parametre ....

    D'ailleurs, where name=xxx order by name .... le order est pas très utile ^^
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  20. #20
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Points : 126
    Points
    126
    Par défaut
    piouf , dsl mais j'essai en suivant tes conseils mais ça ne passe toujours pas , mais je n'ai plus la meme erreur . J'ai fait ceci :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    package com.example.base_de_donnee2;
     
    import java.util.ArrayList;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
     
    public class GestionBaseDonnee {
     
    	//creation de la variable base de donnee
    	private SQLiteDatabase bdd;
     
    	//creation de la variable de classe maBase contenant la creation des tables
    	private MaBase maBase;
     
    	private ArrayList<String> affichage = new ArrayList();
     
    	public GestionBaseDonnee(Context context) {		
    		//creation de la base de donnée
    		maBase = new MaBase(context, "exercice.db", null, 1);
    		System.out.println("création de la base exercice.db");
    	}
     
    	//methode ouverture base en ecriture
    	public void ouvrirBaseDeDonneeModeEcriture(){
    		//definition de la base afin de l'ouvrir en ecriture
    		bdd = maBase.getWritableDatabase();
    		System.out.println("ouverture de la base de donnée mode ecriture");
    	}
     
    	//methode ouverture base en lecture
    	public void ouvrirBaseDeDonneeModeLecture(){
    		//definition de la base afin de l'ouvrir en lecture
    		bdd = maBase.getReadableDatabase();
    		System.out.println("ouverture de la base de donnée mode lecture");
    	}
     
    	//methode fermeture de la base
    	public void fermerLaBase(){
    		bdd.close();
    		System.out.println("fermeture de la base");
    	}
     
    	//methode ajout du nom de l'exercice
    	public void ajout_donnee(Exercice exercice){
    		String nomExercice = exercice.getTitre();
    		ContentValues values = new ContentValues ();
    		values.put ("name" , nomExercice );
    		bdd.insert ("table_exercice" , null , values );
    		System.out.println("ajout des données nom exercice dans la base");
    	}
     
    	//methode ajout du score de l'exercice
    	public void ajout_donnee2(Exercice exercice){
    		System.out.println("ajout des données de score des exercices dans la base");
    		int score = exercice.getValue();
    		String date = exercice.getDate();
     
    		ContentValues values = new ContentValues();
    		values.put("id_exercice",1);
    		values.put("value", score);
    		values.put("date", date);
    		bdd.insert("table_score", null, values);
     
    	}
     
    	//methode d'affiche des données dans la base.
    	public void getExerciceWithNom(String name){
     
    		this.ouvrirBaseDeDonneeModeEcriture();
    		String [] colomns = {"name"};
    		Cursor cursor = bdd.query("table_exercice", colomns , "name = ?" ,new String[] {name} , null, null,null);
     
    		cursor.moveToFirst ();
     
    		do {
    			//	affichage.add(cursor.getString(1));
    			affichage.add(cursor.getString(1));
     
    		} while (cursor.moveToNext ());
    		cursor.close ();
     
    		if(affichage.isEmpty()){
    			System.out.println("la liste est vide et n'a rien à afficher");
    		}else{
    			int i = 0;
    			while(i<affichage.size()){
    				System.out.println("enregistrements table : "+affichage.get(i));
    				i++;
    			}
    		}
    	}
     
    /* ca c'est ce que dit mon cours ... 
     MyDatabase myBase = new MyDatabase ( context , database_name , null ,
    version_number );
    SQLiteDataBase bd = myBase . getWritableDatabase ();
    String [] colomns = {" name " };
    Cursor cursor = bd . query ( " people " , colomns , " id = " +id , null ,
    null , null , " name ") ;
    */
     
    }
    Une fois que je j'aurais réglé ce probleme je dois afficher le resultat de la requête dans une vue c'est pour ça que je cherche à mémoriser les états dans une liste .
    Le problème viendrait bien de la requête mysql ? je te joins l'erreur :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    11-27 20:28:02.553: I/System.out(731): création de la base exercice.db
    11-27 20:28:02.602: I/System.out(731): 27. 8.2012 20h 28m et 2s
    11-27 20:28:02.672: I/System.out(731): ouverture de la base de donnée mode ecriture
    11-27 20:28:02.682: I/System.out(731): ajout des données nom exercice dans la base
    11-27 20:28:02.682: I/System.out(731): ajout des données de score des exercices dans la base
    11-27 20:28:02.702: I/System.out(731): ouverture de la base de donnée mode ecriture
    11-27 20:28:02.702: E/CursorWindow(731): Can't read row# 0, col# 1 from CursorWindow. Make sure your Cursor is initialized correctly.
    11-27 20:28:02.712: D/AndroidRuntime(731): Shutting down VM
    11-27 20:28:02.712: W/dalvikvm(731): threadid=1: thread exiting with uncaught exception (group=0x40014760)
    11-27 20:28:02.732: E/AndroidRuntime(731): FATAL EXCEPTION: main
    11-27 20:28:02.732: E/AndroidRuntime(731): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.base_de_donnee2/com.example.base_de_donnee2.MainActivity}: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.os.Looper.loop(Looper.java:132)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at dalvik.system.NativeStart.main(Native Method)
    11-27 20:28:02.732: E/AndroidRuntime(731): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.database.CursorWindow.getString_native(Native Method)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.database.CursorWindow.getString(CursorWindow.java:372)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:32)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at com.example.base_de_donnee2.GestionBaseDonnee.getExerciceWithNom(GestionBaseDonnee.java:81)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at com.example.base_de_donnee2.MainActivity.onCreate(MainActivity.java:25)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.Activity.performCreate(Activity.java:4397)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779)
    11-27 20:28:02.732: E/AndroidRuntime(731): 	... 11 more

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'insertion dans une table, SQLite
    Par syrine Jerbi dans le forum Android
    Réponses: 1
    Dernier message: 18/02/2014, 11h36
  2. Probléme d'insertion par défault
    Par xavier62 dans le forum SQL
    Réponses: 7
    Dernier message: 28/11/2003, 13h03
  3. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  4. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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