2011-08-31 146 views
3

我在我的Android應用程序中遇到SQLIte數據庫的一些麻煩。 問題在於數據庫永遠不會更新,即使在多次重新啓動模擬器,Eclipse或從DDMS刪除後也不會更新。Android不更新SQLite數據庫

這是我的onCreate方法,坐落在擴展SQLiteOpenHelper類:

public void onCreate(SQLiteDatabase database) { 
    try { 
     database.execSQL(ESSENCE_TABLE_CREATE); 
     database.execSQL(PACCO_TABLE_CREATE); 
     database.execSQL(TAVOLE_TABLE_CREATE); 
     database.rawQuery("insert into essenza values(1, 'Rovere')", 
       null); // added later 
    } catch (SQLException e) { 
     Log.e("DB", e.getMessage()); 
    } 
} 

實例助手後,我請求對數據庫的引用:

helper = new DBHelper(context, dbpath + "/" + DATABASE_NAME); 
    database = helper.getWritableDatabase(); 

看來,rawQuery語句(稍後添加的語句)不會執行,並且正在使用的數據庫將從先前的版本緩存。我也嘗試更改數據庫的版本,但它不起作用。我錯過了什麼嗎?提前致謝。

+1

代碼是否正確?你有一個公開報價。 – MrZander

+1

這是因爲數據庫已經存在。如果你的邏輯是(如果(!dbExists){createDb} else {//什麼都不做) – mihail

+0

@MrZander:我剛剛編輯了代碼,它只是一個錯字 – Tilvia

回答

6

你有兩個選擇:

  1. 使用個DDM刪除從您的設備數據庫文件(查看/數據/數據/)。這將迫使Android再次運行onCreate。
  2. 在您的構造函數中,增加您傳遞給SQLiteOpenHelper的數據庫版本。將您的原始查詢添加到onUpgrade。

您可能想要選項1.如果您的應用程序的用戶需要更新其數據庫,則選項2會更好。

+0

即使我從DDMS中刪除數據庫文件,問題仍然存在,就好像onCreate沒有再次運行一樣。提到數據庫正在保存在一個(虛擬)外部存儲器中 – Tilvia

+0

當你刪除數據庫時,它是否被重新創建?如果是這樣,你應該試着用調試器通過onCreate來看看發生了什麼 – elevine

+0

解決了它(在最不顯然)通過重新創建整個模擬器,並在getWritableDatabase而不是在onCreate之後移動原始查詢,但不知道發生了什麼。 – Tilvia