我正在做一個Android項目,我使用的數據庫超過1表。我第一次嘗試用一張桌子,一切正常,但當我使用第二張桌子時,我有一個錯誤。
下面是代碼:
這部分工作完全正常:SQLite沒有這樣的表錯誤,當使用2表
public class MarqueDBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "reprise.db";
public static final int DATABASE_VERSION = 3;
private static final String SQL_CREATE_ENTRIES = "create table marque (name text primary key)";
private static final String SQL_DELETE_ENTRIES = "drop table if exists marque";
public MarqueDBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db){
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
}
這一個不:
public class ModeleDBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "reprise.db";
public static final int DATABASE_VERSION = 3;
private static final String SQL_CREATE_ENTRIES = "create table modele (name text primary key)";
private static final String SQL_DELETE_ENTRIES = "drop table if exists modele";
public ModeleDBHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db){
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
}
,當我在這裏做一個插入時出現錯誤:
public class ModeleDAO {
private Context context;
private ModeleDBHelper modeleHelper;
private SQLiteDatabase db;
public ModeleDAO(Context context){
this.context=context;
}
public void addMarque(ArrayList<Modele> marqueListe){
modeleHelper = new ModeleDBHelper(context);
db = modeleHelper.getWritableDatabase();
ContentValues values = new ContentValues();
for(Modele str : marqueListe){
values.put("name", str.getNom());
db.insertWithOnConflict("modele", null, values, SQLiteDatabase.CONFLICT_IGNORE);
}
db.close();
modeleHelper.close();
}
}
以下是錯誤:
android.database.sqlite.SQLiteException: no such table: modele (code 1): , while compiling: INSERT OR IGNORE INTO modele(name) VALUES (?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
at quentin.android.fastback2.DataAccess.ModeleDAO.addMarque(ModeleDAO.java:31)
at quentin.android.fastback2.DataAccess.SyncAdapter$3.onResponse(SyncAdapter.java:143)
at quentin.android.fastback2.DataAccess.SyncAdapter$3.onResponse(SyncAdapter.java:125)
at quentin.android.fastback2.Model.CustomRequest.deliverResponse(CustomRequest.java:42)
at quentin.android.fastback2.Model.CustomRequest.deliverResponse(CustomRequest.java:16)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我試過了一些東西,比如更改數據庫版本,卸載/重新安裝應用程序和使用其他設備模擬器(我正在使用Genymotion)
我檢查了數據庫文件,表「marque」是很好的創建,但不是表「模式」。這就像從ModeleDBHelper的OnCreate()方法永遠不會被調用。感謝您的幫助
您不需要創建2個獨立的數據庫幫助器。只有一個就足夠了。 – camelCaseCoder