[英]Problem with SQLite onCreate() in Android
我正在擴展SQLiteOpenHelper類,以幫助我連接並完成數據庫工作。 根據文檔 ,僅當尚未創建數據庫時才應調用OnCreate方法。 但是,我的問題是,當我嘗試執行查詢以插入記錄時遇到此錯誤。
ERROR/Database(214): Failure 1 (table Sample already exists) on 0x218688 when preparing
'CREATE TABLE Sample (RecId INT, SampleDesc TEXT);'.
此Create查詢在代碼中使用的唯一位置是如下所示的OnCreate方法。
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SAMPLE_TABLE_CREATE);
}
注意:我正在學習一個教程 -我做的唯一不同的是將SQLiteDatabase對象設置為public而不是private,以便可以為每個實體擴展此類,讓繼承的DataHelper類中的public SQLiteDatabase對象可以完成所有操作。工作
這是使調用失敗的方法。
//This method is in the class that extends DataHelper (See note on tutorial)
public void createSample(Sample sample)//next action form
{
String id = sample.getId();
String name = sample.getSummary();
String query = "INSERT INTO " + SAMPLE_TABLE_NAME + "( " + SAMPLE_Id + "," +
SAMPLE_NAME + ") " + " VALUES (" + id + "," + name + ")";
try{
data.rawQuery(query, null);
}
catch(SQLException e){
Log.i("Sample", "Errors: Sample LN60: " + e.getMessage());
}
}
有人可以告訴我我在做什么錯嗎? 也許是黑客(即在執行create語句之前檢查表是否存在)
請讓我知道我還可以發布其他代碼來解決此問題...
是因為您只執行一次活動就此,而之后再也不會破壞數據庫嗎? 而第二輪您會遇到此錯誤。
數據庫存儲在/data/data/YOUR_PACKAGE/databases/
,因此一種解決方法是在創建數據庫之前檢查該數據庫是否存在。
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
private static String DB_NAME = "myDBName";
SQLiteDatabase checkDB = null;
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
if(checkDB){
//do nothing
}else{
//create DB
}
代碼源在這里
第一個錯誤很簡單,因為您正在創建一個已經存在的表,所以可以在創建表之前先添加一個檢查表是否存在的方法。 創建或創建一個SQLite dB后,它將一直存在,直到有人刪除它為止,這與默認的onCreate()調用不同,后者類似於重新創建或繪制屏幕。
每次調用getWritableDatabase()的onCreate()方法時都會被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.