首页 > 解决方案 > SQL 请求后应用程序崩溃

问题描述

当我执行 SQL 请求时,我的应用程序崩溃了。

它说该表不存在,我不知道为什么。

你可以帮帮我吗?

这是日志猫:

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 类,但它不起作用.. 我只是向您展示有关香菇(蘑菇)的部分,您可以找到:-方法 onCreate 表香菇的创建位置-方法创建一个蘑菇对象 - 返回包含与 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 depuis& 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;

}

标签: javasql

解决方案


推荐阅读