Sujet: Problème base de donnée SQLite

Bonjour à tous,

Je tiens juste à préciser avant de vous expliquez mon problème que je débute en programmation android et que j'ai essayé de faire des recherches sur le web avant de poster ce sujet.

J'ai créé une base de donnée dans une classe java comme ceci :
(je l'ai simplifié au maximum pour faire des tests)

package com.google.android.sport;

import android.content.Context;
...

public class Base_De_Donnee_Utilisateur extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "DBUser.db";
    private static final int DATABASE_VERSION = 1;
    private static final String CREATE_SQL = "CREATE TABLE tableUser (NOM TEXT PRIMARY KEY);";

    private static final String DROP_SQL="DROP TABLE IF EXISTS tableUser;";
    
    public Base_De_Donnee_Utilisateur(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);        
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_SQL);
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(DROP_SQL);
        onCreate(db);
    }
}

Puis j'ai une classe qui doit insérer un utilisateur dans la classe "tableUser"

package com.google.android.sport;

import java.sql.Date;
...

public class Ajout_Utilisateur extends Activity {
    
    private SQLiteOpenHelper dbHelper;
    private SQLiteDatabase dbUser;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page_ajoute_utilisateur);
        
        open();
        long retourInsert = ajouteUtilisateur(nom, prenom, dateNaissance, taille, poids, niveau);
        String retourInsertString = new Long(retourInsert).toString();
        TextView tv = (TextView)findViewById(R.id.retour_ajou_utilisateur);    
        tv.setText("Retour insertion : "+retourInsertString);    
        close();
    }
    
    public void open() throws SQLException {
        dbHelper = new Base_De_Donnee_Utilisateur(this);                  
        dbUser = dbHelper.getWritableDatabase(); 
    }
     
    public void close() {
        dbHelper.close();
    }
     
    public long ajouteUtilisateur(String nom, String prenom, Date dateNaissance, int taille, int poids, int niveau) {
        ContentValues values = new ContentValues();
        values.put("NOM", "testNom");
        return dbUser.insert("tableUser", null, values);  
    }
}

Donc théoriquement le code affiche à l'écran dans un textView la valeur de retour de l'insertion de l'utilisateur. Si c'est réussi le résultat doit être égal a 1 et moi je me retrouve toujours avec -1 (donc erreur). Le but final étant ensuite de pouvoir exécuter différentes requêtes SQL sur la table.

J'aimerais savoir se que je fait mal dans mon code svp ???

Je vous remercie d'avance pour vos réponses.

Bonne Soirée

Modifié pour la dernière fois par Zeph (26/11/2009 18:35:33)

2

Re: Problème base de donnée SQLite

A première vue ça me semble correct.

Essaie private Base_De_Donnee_Utilisateur dbHelper; dans ta classe mais je doute que ça vienne de là.

Que te dit ddms ?

3

Re: Problème base de donnée SQLite

Bonsoir Viish et merci de votre réponse.

Alors private Base_De_Donnee_Utilisateur dbHelper; ne change, rien j'ai toujours -1.

Je ne sais pas si c'est celà qu'il vous faut mais dans le debugguer il me met en rouge :

11-26 18:22:23.917: ERROR/Database(719): Error inserting NOM=testNom
11-26 18:22:23.917: ERROR/Database(719): android.database.sqlite.SQLiteException: no such table: tableUser: , while compiling: INSERT INTO tableUser(NOM) VALUES(?);
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:925)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1300)
11-26 18:22:23.917: ERROR/Database(719):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1173)
11-26 18:22:23.917: ERROR/Database(719):     at com.google.android.sport.Ajout_Utilisateur.ajouteUtilisateur(Ajout_Utilisateur.java:61)
11-26 18:22:23.917: ERROR/Database(719):     at com.google.android.sport.Ajout_Utilisateur.onCreate(Ajout_Utilisateur.java:35)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
11-26 18:22:23.917: ERROR/Database(719):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-26 18:22:23.917: ERROR/Database(719):     at android.os.Looper.loop(Looper.java:123)
11-26 18:22:23.917: ERROR/Database(719):     at android.app.ActivityThread.main(ActivityThread.java:3948)
11-26 18:22:23.917: ERROR/Database(719):     at java.lang.reflect.Method.invokeNative(Native Method)
11-26 18:22:23.917: ERROR/Database(719):     at java.lang.reflect.Method.invoke(Method.java:521)
11-26 18:22:23.917: ERROR/Database(719):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-26 18:22:23.917: ERROR/Database(719):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-26 18:22:23.917: ERROR/Database(719):     at dalvik.system.NativeStart.main(Native Method)

Modifié pour la dernière fois par Zeph (26/11/2009 19:29:38)

4

Re: Problème base de donnée SQLite

Ben déjà on peut localiser le problème : pour lui ta base de données tableUser existe pas, il te génère donc une exception quand tu essaie d'insérer des données dans une table inexistante, normal.

Maintenant la question est : "Pourquoi ta table n'existe pas ?".
Et la réponse est : Je pense que c'est ton ';' a la fin de ta requête CREATE_SQL.

5

Re: Problème base de donnée SQLite

Je ne sais pas si j'ai bien compris se qu'il fallait faire mais si je met la ligne :

private static final String CREATE_SQL = "CREATE TABLE tableUser (NOM TEXT PRIMARY KEY)";

celà me fait la même erreur que :

private static final String CREATE_SQL = "CREATE TABLE tableUser (NOM TEXT PRIMARY KEY);";

6

Re: Problème base de donnée SQLite

Toujours la même erreur dans ddms ? Parce que la franchement je vois pas.
Essaye ou d'augmenter de 1 la valeur de ta Database_Version, ça pourrait venir de là.

7

Re: Problème base de donnée SQLite

Je crois avoir trouvé.

Alors pour si sa arriverait à quelqu'un d'autre en fête le problème venait du faite que j'avais changer le nom de la table et aparrement il y a eu conflit et il ne créait pas la nouvelle table sur l'ancienne bas de donnée déjà créer donc j'ai juste changer le nom de ma base de donnée pour qu'il m'en créer une nouvelle et sa a fonctionné.

Le seul problème maintenant c'est que pour éviter que j'ai une dizaine de base de donnée que je puisse les supprimer.

Merci pour votre aide

Modifié pour la dernière fois par Zeph (26/11/2009 21:01:59)

8

Re: Problème base de donnée SQLite

J'arrive un peu tard...j'ai moi aussi eut pas mal de soucis avec mes premieres bases de donnees.
Lorsque l'on effectu une modification a notre BD il faut la voir comme une "actualisation" (ou upgrade), c'est-a-dire qu'il faut modifier aussi la version de notre BD.
Pour cela il faut modifier la valeur de la variable :
private static final int DATABASE_VERSION = 1;
Cela a pour effet de lancer la methode onUpgrade qui detruit puis recréé la ou les tables de notre BD.
Pour le numero de la version il suffit de mettre un numero different après chaque modification.

9

Re: Problème base de donnée SQLite

Bonjour Jinx, merci de ta réponse, je comprend mieux !!!

Désolé pour la réponse un peu tardive !!!

Bonne journée a tous !!!

Modifié pour la dernière fois par Zeph (15/12/2009 13:25:06)