2012-11-24 70 views
7

我有一個應用程序,它擁有一個包含3個表的sqlite。我擔心的是,如果我引入一個添加另一個表的更新(所以這是4個表),那麼更新後的版本將會清除數據庫。更新後保留SQLite數據

如何備份/恢復數據庫,因爲備份發生在更新之前並且更新之後還原?如果我使用IO(複製到SD卡並複製),則它會失敗。

我想可能是將數據導出到xml並手動加載。有另一種方法嗎?任何關於如何做的例子?

回答

4

如果您只是想添加一個新表格,請在您的onUpgrade()方法中註釋掉DROP TABLE命令。你有onUpgrade()代碼的完全控制,因此它可以僅僅是:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("CREATE TABLE ..."); 
} 

從技術上講,你甚至都不需要增加的數據庫版本,任何時候你有機會獲得的db一個副本,你可以執行你的CREATE語句。

+0

哦該死!我怎麼沒有想到這一點!謝謝。但我的問題仍然存在,我該如何備份。可以說用戶備份數據庫,卸載應用程序,下載新的更新的應用程序,然後決定他要加載備份的文件。我怎樣才能做到這一點?我不認爲簡單的IO複製會起作用 – Snake

+1

SQLite數據庫只是一個常規文件,因此您可以將其複製到SD卡中,或者甚至可以將其複製到與現有數據庫相同的文件夾中。 [這裏是一個例子](http://stackoverflow.com/q/2170031/1267661)。 – Sam

+0

我想你錯過了我的觀點。可以說我有版本1的數據庫有3個表。我將它複製到SD卡。用戶升級到版本2的db有4個表。現在,如果你從SD複製數據庫文件,那麼你強制版本1,雖然代碼將它視爲版本2.看到問題,我想要一種方式能夠導出和導入數據到相同的表,無論如果有沒有額外的表格 – Snake