Ne trouve pas ma deuxième table de ma BDD

Résolu
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   -  
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   - 12 févr. 2025 à 00:36

Bonjour,

Je reviens vers vous car je n'arrive pas à solutionner mon problème.

Je viens d'ajouter une deuxième table à ma BDD.

Comme indiqué dans mon précédent post ma première table fonctionne sans problème.

C'est que mon appli plante lors de la tentative d'ouverture de ma deuxième table.

Ci-dessous mon code dans SQLiteDataBaseHelper

public class SQLiteDataBaseHelper extends SQLiteOpenHelper {
    public static int sumSyst = 0;//création variable de class systolique
    public static int sumDias = 0;//idem pour diastolique
    public static int sumPulse = 0;
    public static int maxiSyst = 0;
    public static int miniSyst = 0;
    public static int maxiDiast = 0;
    public static int miniDiast = 0;


    public static final String DATABASE_NAME = "Tensions.db";
    public static final String TABLE_NAME = "releves";
    //***************************************************
    public static final String TABLE_ARCHIVE = "archives";
    //****************************************************
    public static final String COL_1 = "ID";
    public static final String COL_2 = "JOUR";
    public static final String COL_3 = "PERIODE";
    public static final String COL_4 = "SYST";
    public static final String COL_5 = "DIAS";
    public static final String COL_6 = "PULS";
    //***********************************************
    public static final String COL_7 = "IDAR";
    public static final String COL_8 = "NOM";
    public static final String COL_9 = "DATE";
    public static final String COL_10 = "MSYST";
    public static final  String COL11 = "MDIAS";
    public static final String COL_12 ="MPULS";

    //contructeur rempli
    public SQLiteDataBaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);

    }

    //méthode de création de la table
    //attention à mettre un espace derrière table
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE table" + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "JOUR TEXT, PERIODE TEXT, SYST INTEGER, DIAS INTEGER, PULS INTEGER)");

        db.execSQL("CREATE table" + TABLE_ARCHIVE + "(IDAR INTEGER PRIMARY KEY AUTOINCREMENT," +
                "NOM TEXT, DATE TEXT, MSYST INTEGER, MDIAS INTEGER, MPULS INTEGER)");

    }//fin méthode onCreate



    //supprime et recré la table pour la mettre à jour
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
        onCreate(db);//recré la table pour la mettre à jour
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_ARCHIVE);
        onCreate(db);//recré la table pour la mettre à jour
    }

    //méthode qui insère les données
    public boolean insertData(String jour, String periode, Integer syst, Integer dias, Integer puls){
        SQLiteDatabase db = this.getWritableDatabase(); //ouvre la table en écriture
        ContentValues contentValues = new ContentValues();//cré l'objet contentvalues
        contentValues.put(COL_2, jour);
        contentValues.put(COL_3, periode);
        contentValues.put(COL_4, syst);
        contentValues.put(COL_5, dias);
        contentValues.put(COL_6, puls);
        long result = db.insert(TABLE_NAME, null, contentValues);
        return result != -1;

    }//fin insertdata

    public boolean insertDonnees(String nom, String date, String msyst, String mdias, String mpuls) {
        SQLiteDatabase db = this.getWritableDatabase(); //ouvre la table en écriture
        ContentValues contentValues1 = new ContentValues();//cré l'objet contentvalues
        contentValues1.put(COL_8, nom);
        contentValues1.put(COL_9, date);
        contentValues1.put(COL_10, msyst);
        contentValues1.put(COL11, mdias);
        contentValues1.put(COL_12, mpuls);
        long result1 = db.insert(TABLE_ARCHIVE, null, contentValues1);
        return result1 != -1;

    }

    public Cursor crerColonne(){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("SELECT ID as id, JOUR, PERIODE, SYST, DIAS, PULS, * FROM releves", null);
    }

    //méthode pour supprimer une ligne
    public void supprime_ligne(long id){
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_NAME, "id = ?", new String[]
                {Integer.toString((int) id) });
    }

    //fonction pour supprimer toutes les données de la BDD
    public void deleteAll(){
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DELETE FROM " +TABLE_NAME);
        db.close();
    }

    //méthode pour afficher toutes les données
    public Cursor Toute_lesDatas(){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("SELECT ID as _id, * FROM releves ORDER BY JOUR", null);
                                //attention toujours mettre un espace derrrière le mot as
    }
    //***************************************************************************************
    //méthode pour afficher toutes les données de la deuxième table archives
    public Cursor TotalData2(){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("SELECT IDAR as _idar, * FROM archives ORDER BY NOM", null);
    }

Windows / Firefox 135.0

C'est cette dernière requête avec TotalData2 qui pose problème.

Mon message d'erreur du logcat:  Error Code : 1 (SQLITE_ERROR)
 Caused By : SQL(query) error or missing database.
 (no such table: archives (code 1):
 , while compiling: SELECT IDAR as _idar, * FROM archives ORDER BY NOM)

Pourtant j'ai bien créé la table archives vu le code ci-dessus.

Merci de bien vouloir m'aider.

très cordialement

rapidegoyes

A voir également:

5 réponses

sdbh
 

Bonjour,

pour la méthode onCreate, un commentaire indique de faire attention à mettre un espace entre le mot-clé sql TABLE et le nom de la table, ce qui ne semble pas être le cas dans ton code : la création des tables ne semble donc pas fonctionné dans ce cas.

0
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   13
 

Bonsoir sdbh,

je ne vois pas où il faut mettre  l'espace que tu m'indique.

Pourrai tu me donner plus d'indications, il me semble que j'ai des espaces.

Par rapport à ma première table releves j'ai respecté la même disposition des caractères .

Ce qui fait que la première fonctionne sans problème, mais pas la deuxième nommée archives

Merci

cordialement

à+++ rapidegoyes

0
jordane45 Messages postés 38472 Date d'inscription   Statut Modérateur Dernière intervention   4 745
 

bonsoir 

CREATE table " + 
0
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   13
 

Bonsoir,

Décidément je n'y arrive pas à ajouter une deuxième table.

Vu mon code ci-dessus l'erreur est qu'il ne trouve pas ma deuxième table

Merci de m'épauler, j'ai beau chercher je ne trouve pas de doc pour celà.

cordialement

rapidegoyes

0
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   13
 

Bonsoir jordane45,

Merci pour ton aide

J'ai desinstallé l'appli et j'ai mis l'espace après table

 public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "JOUR TEXT, PERIODE TEXT, SYST INTEGER, DIAS INTEGER, PULS INTEGER)");

        db.execSQL("CREATE table " + TABLE_NAME2 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                "NOM TEXT, DATE TEXT, MSYST INTEGER, MDIAS INTEGER, MPULS INTEGER)");

    }//fin méthode onCreate

Maintenant il me semble que la deuxième table est prise en compte.

Mais il y a une nouvelle erreur comme suit:

Caused by: java.lang.IllegalArgumentException: column '_id' does not exist

Voici le code de déclaration de la table:

 public static final String DATABASE_NAME = "Tensions.db";
    public static final String TABLE_NAME = "releves";
    //***************************************************
    public static final String TABLE_NAME2 = "archives";
    //****************************************************
    public static final String COL_1 = "ID";
    public static final String COL_2 = "JOUR";
    public static final String COL_3 = "PERIODE";
    public static final String COL_4 = "SYST";
    public static final String COL_5 = "DIAS";
    public static final String COL_6 = "PULS";
    //***********************************************

    public static final String COL_7 = "ID";
    public static final String COL_8 = "NOM";
    public static final String COL_9 = "DATE";
    public static final String COL_10 = "MSYST";
    public static final  String COL_11 = "MDIAS";
    public static final String COL_12 ="MPULS";

    //contructeur rempli
    public SQLiteDataBaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);

    }

    //méthode de création de la table
    //attention à mettre un espace derrière table
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE table " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "JOUR TEXT, PERIODE TEXT, SYST INTEGER, DIAS INTEGER, PULS INTEGER)");

        db.execSQL("CREATE table " + TABLE_NAME2 + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                "NOM TEXT, DATE TEXT, MSYST INTEGER, MDIAS INTEGER, MPULS INTEGER)");

    }//fin méthode onCreate



    //supprime et recré la table pour la mettre à jour
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
        onCreate(db);//recré la table pour la mettre à jour
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME2);
        onCreate(db);//recré la table pour la mettre à jour
    }

J'ai codé comme la première table qui s'affiche.

Voici l'adapter:

 Cursor data2 = db.TotalData2(); //appel la requête qui affiche toute la Bdd
        //écrite dans SQLiteDataBaseHelper

        //création de l'ojet setadater pour afficher la liste
        SimpleCursorAdapter adapter8 = new SimpleCursorAdapter(this, R.layout.row_item, data2, new String[]
                {"NOM", "DATE", "MSYST", "MDIAS", "MPULS"}, new int[]
                {R.id.textViewCol2, R.id.textViewCol3, R.id.textViewCol4, R.id.textViewCol5, R.id.textViewCol6});
        lv.setAdapter(adapter8);

Vraiment là je bloque

Merci pour ton aide

Cordialement

rapidegoyyes

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rapidegoyes Messages postés 138 Date d'inscription   Statut Membre Dernière intervention   13
 

ReBonsoir jordan45

C'est super ça marche j'avai baptisez mon ID en IDAR que j'ai rectifié en ID.

Puis j'ai desinstallé l'appli et réinstallé et tout est rentré dans l'ordre

La nouvelle table s'ouvre.

Merci pour ton aide

cordialement à +++

0