2013-05-16 98 views
1

我創建了一個數據庫,這樣再次創建數據庫:如何防止從開始

public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + "sorular" 
       + " (_id INTEGER PRIMARY KEY," 
       + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT," 
       + " siklar3 TEXT," + "siklar4 TEXT," + "cevap INTEGER" 
        + "zorluk INTEGER);"); 
} 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXIST sorular"); 
     onCreate(db); 

} 

之後,我已經加入到DATAS數據庫和我推到數據庫模擬器。但是,當我關閉並重新運行應用程序時,它會從頭開始重新創建數據庫。所以,我的數據被刪除。如何預防這個?我該怎麼辦?

+1

傳入超類'SQLiteOpenHelper'構造函數的'version'號是什麼? – laalto

+0

'version' number is 1 –

+0

「將數據庫推送到模擬器上」 - 所以你使用一些工具編輯數據庫?確保[PRAGMA user_version(http://www.sqlite.org/pragma.html#pragma_schema_version)值保持不變(那就是'version'號)。 – laalto

回答

1

基於明確的意見,似乎你的SQLite數據庫上的另一個SQLite數據庫管理員編輯數據庫時user_version號被覆蓋。 Android使用此字段存儲傳入SQLiteOpenHelper構造函數的version編號,以及使用onUpgrade()onDowngrade()從另一版本升級數據庫時。默認情況下,版本爲0,所以當使用版本1 SQLiteOpenHelper時,你會從版本0升級到1,在你的情況下會破壞數據。

一些方法來緩解這個問題:

  1. 只有創建和使用Android輔助類編輯SQLite數據庫。

  2. 實現非破壞性的onUpgrade(),即不丟棄表的表,只確保所需的表在那裏,並根據需要從舊錶遷移數據。

  3. 如果使用外部數據庫管理器,請發出PRAGMA user_version=n; SQL命令以確保數據庫版本爲n。 (對不起,沒有使用過Mozilla的工具,不知道它是否可以在那裏以及如何實現)

+0

我已經解決了這個問題..謝謝你的關注 –