сбой приложения после запроса SQL

#java #sql

#java #sql

Вопрос:

Мое приложение выходит из строя, когда я выполняю запрос SQL.

В нем говорится, что таблица не существует, и я не знаю почему.

Не могли бы вы мне помочь?

Вот logcat:

 03-27 15:35:49.718 5672-5672/descartes.info.l3ag2.eyetrek E/AndroidRuntime: FATAL EXCEPTION: main
Process: descartes.info.l3ag2.eyetrek,
PID: 5672 android.database.sqlite.SQLiteException: no such table: bddchampignons (code 1):,
while compiling: SELECT  * FROM bddchampignons
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
    at descartes.info.l3ag2.eyetrek.classes.DatabaseHandler.getAllChampignons(DatabaseHandler.java:578)
    at descartes.info.l3ag2.eyetrek.fragment.mushroomanalysis.FragmentCirconstance1.lambda$onCreateView$2$FragmentCirconstance1(FragmentCirconstance1.java:147)
    at descartes.info.l3ag2.eyetrek.fragment.mushroomanalysis.FragmentCirconstance1$$Lambda$2.onClick(Unknown Source)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  

это запрос, который я выполняю :

 List<Mushroom> MushroomList = new ArrayList<Mushroom>();
MushroomList = databaseHandler.getAllChampignons();
String res= "";

Log.e("List", MushroomList.toString());

for (Mushroom mushroom: MushroomList) {
    Log.e("NAME", mushroom.getName());
    res = res   mushroom.getId()   "n";
}

createAlertBox("Resultats", res);
  

и это часть кода из моего класса DatabaseHandler, где находится метод getAllChampignons :

 private static final String TABLE_CHAMPIGNON = "bddchampignons";
//(my csv file is named "bddchampignons")

public List<Mushroom> getAllChampignons() {
    List<Mushroom> champignonsList = new ArrayList<Mushroom>();
    String selectQuery = "SELECT  * FROM "   TABLE_CHAMPIGNON;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            Mushroom champ = new Mushroom();
            champ.setId(Integer.parseInt(cursor.getString(0)));
            champ.setName(cursor.getString(1));
            champ.setDiametreMin(Integer.parseInt(cursor.getString(2)));
            champ.setDiametreMax(Integer.parseInt(cursor.getString(3)));
            champ.setCouleurChapeau(cursor.getString(4));
            champ.setFormeChapeau(cursor.getString(5));
            champ.setSurfaceChapeau(cursor.getString(6));
            champ.setTypeMarge(cursor.getString(7));
            champ.setCouleurMarge(cursor.getString(8));
            champ.setDessousChapeau(cursor.getString(9));
            champ.setCouleurDessousChapeau(cursor.getString(10));            
            champ.setOxydationChapeau(cursor.getString(11));
            champ.setCouleurOxydationChapeau(cursor.getString(12));
            champ.setInsertionDessousPied(cursor.getString(13));
            champ.setEspaceLamelles(cursor.getString(14));
            champ.setTypeLamelles(cursor.getString(15));
            champ.setCouleurPied(cursor.getString(16));
            champ.setPiedCreuxPlein(cursor.getString(17));
            champ.setFormePied(cursor.getString(18));
            champ.setLongueurPied(cursor.getString(19));
            champ.setSurfacePied(cursor.getString(20));
            champ.setPositionPiedChapeau(cursor.getString(21));
            champ.setPresenceAnneau(cursor.getString(22));
            champ.setOrientationAnneau(cursor.getString(23));
            champ.setMobiliteAnneau(cursor.getString(24));
            champ.setCouleurAnneau(cursor.getString(25));
            champ.setPousseTouffe(cursor.getString(26));
            champ.setCouleurBasePied(cursor.getString(27));
            champ.setCouleurChair(cursor.getString(28));
            champ.setOxydationChair(cursor.getString(29));
            champ.setCouleurOxydationChair(cursor.getString(30));
            champ.setFermeteChair(cursor.getString(31));
            champ.setOdeur(cursor.getString(32));
            champ.setLatex(cursor.getString(33));
            champ.setCouleurLatex(cursor.getString(34));
            champ.setMoisPousseTot(cursor.getString(35));
            champ.setMoisPousseTard(cursor.getString(36));
            champ.setMilieu(cursor.getString(37));
            champ.setPousseBois(cursor.getString(38));
            champ.setNomVernaculaire(cursor.getString(39));
            champ.setComestibilite(cursor.getString(40));
            champ.setCommentaires(cursor.getString(41));
            champ.setSynonymes(cursor.getString(42));
            champignonsList.add(champ);
        } while (cursor.moveToNext());
    }

    return champignonsList;
}
  

это мой класс DatabaseHandler, в котором я создал свою таблицу, но она не работает..
Я просто показываю вам ту часть, где речь идет о шампиньонах (mushrooms)
и вы можете найти :
— метод onCreate, в котором создается таблица champignons
— метод создания грибовидного объекта
— метод, который возвращает список с элементами, соответствующими запросу SQL
— метод, который возвращает список со всеми элементами базы данных
— метод

     public class DatabaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "db_eyetrek";



private static final String TABLE_CHAMPIGNON = "bddchampignons";
private static final String CHAMP_ID = "id";
private static final String CHAMP_NAME = "name";
private static final String CHAMP_DIAMETRE_MIN = "diametreMin";
private static final String CHAMP_DIAMETRE_MAX = "diametreMax";
private static final String COULEUR_CHAPEAU = "couleurChapeau";
private static final String FORME_CHAPEAU = "formeChapeau";
private static final String SURFACE_CHAPEAU = "surfaceChapeau";
private static final String TYPE_MARGE= "typeMarge";
private static final String COULEUR_MARGE = "couleurMarge";
private static final String DESSOUS_CHAPEAU = "dessousChapeau";
private static final String COULEUR_DESSOUS_CHAPEAU = "couleurDessousChapeau";
private static final String OXYDATION_CHAPEAU = "oxydationChapeau";
private static final String COULEUR_OXYDATION_CHAPEAU = "couleurOxydationChapeau";
private static final String INSERTION_DESSOUS_PIED= "insertionDessousPied";
private static final String ESPACE_LAMELLES = "espaceLamelles";
private static final String TYPE_LAMELLES = "typeLamelles";
private static final String COULEUR_PIED = "couleurPied";
private static final String PIED_CREUX_PLEIN = "piedCreuxPlein";
private static final String FORME_PIED = "formePied";
private static final String LONGEUR_PIED = "longueurPied";
private static final String SURFACE_PIED = "surfacePied";
private static final String POSITION_PIED_CHAPEAU = "positionPiedChapeau";
private static final String PRESENCE_ANNEAU = "presenceAnneau";
private static final String ORIENTATION_ANNEAU = "orientationAnneau";
private static final String MOBILITE_ANNEAU = "mobiliteAnneau";
private static final String COULEUR_ANNEAU = "couleurAnneau";
private static final String POUSSE_TOUFFE = "pousseTouffe";
private static final String COULEUR_BASE_PIED = "couleurBasePied";
private static final String COULEUR_CHAIR = "couleurChair";
private static final String OXYDATION_CHAIR = "oxydationChair";
private static final String COULEUR_OXYDATION_CHAIR = "couleurOxydationChair";
private static final String FERMETE_CHAIR = "fermeteChair";
private static final String ODEUR = "odeur";
private static final String LATEX = "latex";
private static final String COULEUR_LATEX = "couleurLatex";
private static final String MOIS_POUSSE_TOT = "moisPousseTot";
private static final String MOIS_POUSSE_TARD = "moisPousseTard";
private static final String MILIEU = "milieu";
private static final String POUSSE_BOIS = "pousseBois";
private static final String NOM_VERNACULAIRE  = "nomVernaculaire";
private static final String COMESTIBILITE = "comestibilite";
private static final String COMMENTAIRES = "commentaires";
private static final String SYNONYMES = "synonymes";


public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    getReadableDatabase();
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

    //Création de la table champignon

    String CREATE_CHAMPIGNON_TABLE = "create table if not exists "   TABLE_CHAMPIGNON   " ("
              CHAMP_ID   " INTEGER PRIMARY KEY AUTOINCREMENT ,"   CHAMP_NAME   " VARCHAR (40),"
              CHAMP_DIAMETRE_MIN   " INTEGER (2),"   CHAMP_DIAMETRE_MAX   " VARCHAR(3) ,"    COULEUR_CHAPEAU   " VARCHAR (30),"   FORME_CHAPEAU   " VARCHAR (70),"
              SURFACE_CHAPEAU   " VARCHAR (105),"   TYPE_MARGE   " VARCHAR (101),"   COULEUR_MARGE   " VARCHAR (11),"   DESSOUS_CHAPEAU   " VARCHAR (26),"
              COULEUR_DESSOUS_CHAPEAU   " VARCHAR (29),"   OXYDATION_CHAPEAU   " VARCHAR(20),"   COULEUR_OXYDATION_CHAPEAU   " VARCHAR(14),"   INSERTION_DESSOUS_PIED   " VARCHAR (46),"
              ESPACE_LAMELLES   " VARCHAR (8),"   TYPE_LAMELLES   " VARCHAR (34),"   COULEUR_PIED   " VARCHAR (22),"   PIED_CREUX_PLEIN   " VARCHAR (21),"
              FORME_PIED   " VARCHAR (165),"   LONGEUR_PIED   " VARCHAR (10),"   SURFACE_PIED   " VARCHAR (84),"   POSITION_PIED_CHAPEAU   " VARCHAR (9),"
              PRESENCE_ANNEAU   " VARCHAR (3),"   ORIENTATION_ANNEAU   " VARCHAR (10),"   MOBILITE_ANNEAU   " VARCHAR (6),"   COULEUR_ANNEAU   " VARCHAR (43),"
              POUSSE_TOUFFE   " VARCHAR (3),"  COULEUR_BASE_PIED   " VARCHAR (21),"   COULEUR_CHAIR   " VARCHAR (30),"   OXYDATION_CHAIR   " VARCHAR (3),"
              COULEUR_OXYDATION_CHAIR   " VARCHAR (21),"   FERMETE_CHAIR   " VARCHAR (16),"   ODEUR   " VARCHAR (25),"   LATEX   " VARCHAR (3),"   COULEUR_LATEX   " VARCHAR (14),"
              MOIS_POUSSE_TOT   " VARCHAR (19),"   MOIS_POUSSE_TARD   " VARCHAR (20),"   MILIEU   " VARCHAR (49),"   POUSSE_BOIS   " VARCHAR (3),"   NOM_VERNACULAIRE   " VARCHAR (87),"
              COMESTIBILITE   " VARCHAR (18),"   COMMENTAIRES   " VARCHAR (332),"   SYNONYMES   " VARCHAR (34) )";




    sqLiteDatabase.execSQL(CREATE_CHAMPIGNON_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "   TABLE_DIDACTICIEL);
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "   TABLE_LEAFS);
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "   TABLE_ANIMAL);
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "   TABLE_CHAMPIGNON);
    onCreate(sqLiteDatabase);
}

public void addChampignon (Mushroom champignon) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(CHAMP_NAME, champignon.getName());
    values.put(CHAMP_DIAMETRE_MIN, champignon.getDiametreMin());
    values.put(CHAMP_DIAMETRE_MAX, champignon.getDiametreMax());
    values.put(COULEUR_CHAPEAU, champignon.getCouleurChapeau());
    values.put(FORME_CHAPEAU, champignon.getFormeChapeau());
    values.put(SURFACE_CHAPEAU, champignon.getSurfaceChapeau());
    values.put(TYPE_MARGE, champignon.getTypeMarge());
    values.put(COULEUR_MARGE, champignon.getCouleurMarge());
    values.put(DESSOUS_CHAPEAU, champignon.getDessousChapeau());
    values.put(COULEUR_DESSOUS_CHAPEAU,champignon.getCouleurDessousChapeau());
    values.put(OXYDATION_CHAPEAU, champignon.getOxydationChapeau());
    values.put(COULEUR_OXYDATION_CHAPEAU, champignon.getCouleurOxydationChapeau());
    values.put(INSERTION_DESSOUS_PIED, champignon.getInsertionDessousPied());
    values.put(ESPACE_LAMELLES, champignon.getEspaceLamelles());
    values.put(TYPE_LAMELLES, champignon.getTypeLamelles());
    values.put(COULEUR_PIED, champignon.getCouleurPied());
    values.put(PIED_CREUX_PLEIN, champignon.getPiedCreuxPlein());
    values.put(FORME_PIED, champignon.getFormePied());
    values.put(LONGEUR_PIED, champignon.getLongueurPied());
    values.put(SURFACE_PIED, champignon.getSurfacePied());
    values.put(POSITION_PIED_CHAPEAU, champignon.getPositionPiedChapeau());
    values.put(PRESENCE_ANNEAU, champignon.getPresenceAnneau());
    values.put(ORIENTATION_ANNEAU, champignon.getOrientationAnneau());
    values.put(MOBILITE_ANNEAU, champignon.getMobiliteAnneau());
    values.put(COULEUR_ANNEAU, champignon.getCouleurAnneau());
    values.put(POUSSE_TOUFFE, champignon.getPousseTouffe());
    values.put(COULEUR_BASE_PIED, champignon.getCouleurBasePied());
    values.put(COULEUR_CHAIR, champignon.getCouleurChair());
    values.put(OXYDATION_CHAIR, champignon.getCouleurOxydationChair());
    values.put(COULEUR_OXYDATION_CHAIR, champignon.getCouleurOxydationChair());
    values.put(FERMETE_CHAIR, champignon.getFermeteChair());
    values.put(ODEUR, champignon.getOdeur());
    values.put(LATEX, champignon.getLatex());
    values.put(COULEUR_LATEX, champignon.getCouleurLatex());
    values.put(MOIS_POUSSE_TOT, champignon.getMoisPousseTot());
    values.put(MOIS_POUSSE_TARD, champignon.getMoisPousseTard());
    values.put(MILIEU, champignon.getMilieu());
    values.put(POUSSE_BOIS, champignon.getPousseBois());
    values.put(NOM_VERNACULAIRE, champignon.getNomVernaculaire());
    values.put(COMESTIBILITE, champignon.getComestibilite());
    values.put(COMMENTAIRES, champignon.getCommentaires());
    values.put(SYNONYMES, champignon.getSynonymes());

    db.insert(TABLE_CHAMPIGNON, null, values);
    db.close();
}


/**
 * Retourne une liste des champignons  correspondant à la requête
 *
 * @param query
 * @return
 */
public List<Mushroom> getChampignonFromRequest(String query) {
    List<Mushroom> mushroomList = new ArrayList<Mushroom>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);
    if (cursor.moveToFirst()) {
        do {
            Mushroom champ = new Mushroom();
            champ.setId(Integer.parseInt(cursor.getString(0)));
            champ.setName(cursor.getString(1));
            champ.setDiametreMin(Integer.parseInt(cursor.getString(2)));
            champ.setDiametreMax(Integer.parseInt(cursor.getString(3)));
            champ.setCouleurChapeau(cursor.getString(4));
            champ.setFormeChapeau(cursor.getString(5));
            champ.setSurfaceChapeau(cursor.getString(6));
            champ.setTypeMarge(cursor.getString(7));
            champ.setCouleurMarge(cursor.getString(8));
            champ.setDessousChapeau(cursor.getString(9));
            champ.setCouleurDessousChapeau(cursor.getString(10));
            champ.setOxydationChapeau(cursor.getString(11));
            champ.setCouleurOxydationChapeau(cursor.getString(12));
            champ.setInsertionDessousPied(cursor.getString(13));
            champ.setEspaceLamelles(cursor.getString(14));
            champ.setTypeLamelles(cursor.getString(15));
            champ.setCouleurPied(cursor.getString(16));
            champ.setPiedCreuxPlein(cursor.getString(17));
            champ.setFormePied(cursor.getString(18));
            champ.setLongueurPied(cursor.getString(19));
            champ.setSurfacePied(cursor.getString(20));
            champ.setPositionPiedChapeau(cursor.getString(21));
            champ.setPresenceAnneau(cursor.getString(22));
            champ.setOrientationAnneau(cursor.getString(23));
            champ.setMobiliteAnneau(cursor.getString(24));
            champ.setCouleurAnneau(cursor.getString(25));
            champ.setPousseTouffe(cursor.getString(26));
            champ.setCouleurBasePied(cursor.getString(27));
            champ.setCouleurChair(cursor.getString(28));
            champ.setOxydationChair(cursor.getString(29));
            champ.setCouleurOxydationChair(cursor.getString(30));
            champ.setFermeteChair(cursor.getString(31));
            champ.setOdeur(cursor.getString(32));
            champ.setLatex(cursor.getString(33));
            champ.setCouleurLatex(cursor.getString(34));
            champ.setMoisPousseTot(cursor.getString(35));
            champ.setMoisPousseTard(cursor.getString(36));
            champ.setMilieu(cursor.getString(37));
            champ.setPousseBois(cursor.getString(38));
            champ.setNomVernaculaire(cursor.getString(39));
            champ.setComestibilite(cursor.getString(40));
            champ.setCommentaires(cursor.getString(41));
            champ.setSynonymes(cursor.getString(42));

            mushroomList.add(champ);

        } while (cursor.moveToNext());

    }
    cursor.close();
    return mushroomList;

}



/**
 * Ajout des Champignons depuisamp; un CSV
 *
 * @param inputStream
 * @param context
 */
public void addChampignonFromCsv(InputStream inputStream, Context context) {
    DatabaseHandler db = new DatabaseHandler(context);
    Scanner scanner = new Scanner(inputStream);
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        String str[] = line.split(";");
        db.addChampignon(new Mushroom(Integer.parseInt(str[0]), str[1], Integer.parseInt(str[2]), Integer.parseInt(str[3]),str[4],str[5],
                str[6],str[7],str[8],str[9],str[10],str[11],str[12],str[13],str[14],str[15],
                str[16],str[17],str[18],str[19],str[20],str[21],str[22],str[23],str[24],str[25],
                str[26],str[27],str[28],str[29],str[30],str[31],str[32],str[33],str[34],str[35],
                str[36],str[37],str[38],str[39],str[40],str[41],str[42]));
    }
    scanner.close();
}


/**
 * Retourne tous les champignons de la base de données
 *
 * @return
 */
public List<Mushroom> getAllChampignons() {
    List<Mushroom> champignonsList = new ArrayList<Mushroom>();
    String selectQuery = "SELECT  * FROM "   TABLE_CHAMPIGNON;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            Mushroom champ = new Mushroom();
            champ.setId(Integer.parseInt(cursor.getString(0)));
            champ.setName(cursor.getString(1));
            champ.setDiametreMin(Integer.parseInt(cursor.getString(2)));
            champ.setDiametreMax(Integer.parseInt(cursor.getString(3)));
            champ.setCouleurChapeau(cursor.getString(4));
            champ.setFormeChapeau(cursor.getString(5));
            champ.setSurfaceChapeau(cursor.getString(6));
            champ.setTypeMarge(cursor.getString(7));
            champ.setCouleurMarge(cursor.getString(8));
            champ.setDessousChapeau(cursor.getString(9));
            champ.setCouleurDessousChapeau(cursor.getString(10));
            champ.setOxydationChapeau(cursor.getString(11));
            champ.setCouleurOxydationChapeau(cursor.getString(12));
            champ.setInsertionDessousPied(cursor.getString(13));
            champ.setEspaceLamelles(cursor.getString(14));
            champ.setTypeLamelles(cursor.getString(15));
            champ.setCouleurPied(cursor.getString(16));
            champ.setPiedCreuxPlein(cursor.getString(17));
            champ.setFormePied(cursor.getString(18));
            champ.setLongueurPied(cursor.getString(19));
            champ.setSurfacePied(cursor.getString(20));
            champ.setPositionPiedChapeau(cursor.getString(21));
            champ.setPresenceAnneau(cursor.getString(22));
            champ.setOrientationAnneau(cursor.getString(23));
            champ.setMobiliteAnneau(cursor.getString(24));
            champ.setCouleurAnneau(cursor.getString(25));
            champ.setPousseTouffe(cursor.getString(26));
            champ.setCouleurBasePied(cursor.getString(27));
            champ.setCouleurChair(cursor.getString(28));
            champ.setOxydationChair(cursor.getString(29));
            champ.setCouleurOxydationChair(cursor.getString(30));
            champ.setFermeteChair(cursor.getString(31));
            champ.setOdeur(cursor.getString(32));
            champ.setLatex(cursor.getString(33));
            champ.setCouleurLatex(cursor.getString(34));
            champ.setMoisPousseTot(cursor.getString(35));
            champ.setMoisPousseTard(cursor.getString(36));
            champ.setMilieu(cursor.getString(37));
            champ.setPousseBois(cursor.getString(38));
            champ.setNomVernaculaire(cursor.getString(39));
            champ.setComestibilite(cursor.getString(40));
            champ.setCommentaires(cursor.getString(41));
            champ.setSynonymes(cursor.getString(42));

            champignonsList.add(champ);

        } while (cursor.moveToNext());

    }
    return champignonsList;

}
  

Комментарии:

1. Таблица bddchampignons не существует в базе данных

2. Я добавил класс DatabaseHandler, в котором я создал таблицу, и все равно он не работает..

3. Попробуйте войти в базу данных и проверить наличие таблицы, используя идентификатор, который использует эта программа. Возможно, таблица существует, а идентификатору пользователя не предоставлено разрешение.

4. Что getReadableDatabase() делает?