2012-11-12 74 views
0

想象以下場景Android的關注(我允許我的應用程序備份/恢復,我在做備份/恢復白皙整個file.db):與恢復數據庫

用戶對數據庫進行備份。 將來我會對我的應用程序進行更新,該應用程序具有新版本的數據庫。 如果用戶使用舊版本恢復數據庫會發生什麼情況?

我該如何避免這類問題?

這將是一個好主意,使用BackupHelper?我模擬了數據庫中最糟糕的情況,並給了20k,建議BackupHelper小於1mb,使用它會是一個好主意?我認爲我的應用永遠不會超過100kb。

回答

1

您通過SQLiteOpenHelper,它提供了三種回調訪問SQLite數據庫。

構造聲明一個version參數,並在內部數據庫的數據庫版本與提供的參數進行比較(其被存儲在文件中)。如果請求的版本比文件更新,則調用onUpgrade(db, old, new),您將有機會更改表格,填充行等。

恢復過程應該簡單地關閉所有打開的遊標和助手並複製新文件。

+0

謝謝它可以工作=)。嘿你怎麼看待使用BackupHelper進行備份和恢復?我模擬了數據庫中最糟糕的情況,並給了20k,建議BackupHelper小於1mb,使用它會是一個好主意?我認爲我的應用永遠不會超過100kb。 – weldsonandrade

+0

這取決於。備份框架旨在成爲使用戶數據在工廠重置和設備升級後不受影響的自動化方式。如果這就是你想要的,沒關係(文件大小在這裏並不重要)。如果您需要多個客戶端同步或其他相關功能,則必須自己對其進行編碼。我想說,從框架開始,因爲它很快速且有效,並且瞭解您的應用程序如何發展以及您的用戶需要什麼 – Raffaele

1

可能這是不是最好的辦法,但你可以做到這一點是:

1存儲數據庫版本在數據庫中。

2-恢復數據庫後,檢查數據庫版本並相應地進行必要的更改。 onCreate()onUpgrade()onOpen():像

void afterRestoration() 
{ 
    long dbVersion = get from db; 
    if(dbVersion == 1) 
    { 
    alter table1 add column1; 
    } 
    else 
    { 
    } 
} 
+0

謝謝它可以工作=)。嘿你怎麼看待使用BackupHelper進行備份和恢復?我模擬了數據庫中最糟糕的情況,並給了20k,建議BackupHelper小於1mb,使用它會是一個好主意?我認爲我的應用永遠不會超過100kb。 – weldsonandrade

+0

我沒有用過它!但從文檔看,它對我來說是一個很好的解決方案。 –