我想備份我的應用程序數據庫在sdcard
並稍後導入它。 .sqlite
db由ORMLite管理。我已經閱讀了回答https://stackoverflow.com/a/20143148/335105,但按照這種方法將刪除導出後生成的當前數據庫中的所有數據。備份/恢復Android應用數據庫由ORMLite管理
有沒有一種方法可以將我的數據庫導出到SD卡,稍後導入它而不會丟失已經包含的數據?建議?
我想備份我的應用程序數據庫在sdcard
並稍後導入它。 .sqlite
db由ORMLite管理。我已經閱讀了回答https://stackoverflow.com/a/20143148/335105,但按照這種方法將刪除導出後生成的當前數據庫中的所有數據。備份/恢復Android應用數據庫由ORMLite管理
有沒有一種方法可以將我的數據庫導出到SD卡,稍後導入它而不會丟失已經包含的數據?建議?
如果您知道您的數據模型稍後不會更改,您可以創建數據庫的「啞」導出。 DB作爲文件存儲在
中public static final String CURRENT_DATABASE_PATH = "data/data/" + App.getContext().getPackageName() + "/databases/" + DatabaseHelper.DATABASE_NAME
其中DATABASE_NAME是創建數據庫時使用的名稱。
下面是我使用的方法(我不是一個作家,這個代碼是強烈一些其他計算器線程,我現在不能找到inspirated) 出口:
public static void exportDB() {
try {
File dbFile = new File(CURRENT_DATABASE_PATH);
FileInputStream fis = new FileInputStream(dbFile);
getExportDirectory();
String outFileName = createExportName();
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
output.flush();
output.close();
fis.close();
} catch (Exception e) {
App.log(e);
}
}
而且再次進口
public static boolean importDB(String dbPath) {
try {
AppStorage.get().close();
File newDb = new File(dbPath);
File oldDb = new File(CURRENT_DATABASE_PATH);
if (newDb.exists()) {
copyFile(new FileInputStream(newDb), new FileOutputStream(oldDb));
AppStorage.get().getWritableDatabase().close();
}
AppStorage.reset();
return true;
} catch (Exception e) {
App.log(e);
}
return false;
}
不過,如果你打算更新您的數據模型,這種方法是行不通的,所以你可能需要manualy導出/導入你想要的一切。
編輯:AppStorage是我的自定義數據包封裝。這種方法不會刪除你的數據庫。
不得不在現有的應用程序上開發一個手動導入/導出系統,這不是很漂亮......嘆! –