我總是用1.)。這是我的一個類,它可以將數據庫備份到SD卡。我在這裏使用Apache commons-io的FileUtils,如果你不使用那個jar,你需要改變它。另外,在SQLiteOpenHelper類(這裏是MySQLiteOpenHelper.getDatabaseName())中需要一個返回數據庫文件名稱的方法。
你會在你的活動之一調用來自內部的AsyncTask ...
public class MyDatabaseTools {
private String appName = "";
private String packageName = "";
public boolean backup() {
boolean rc = false;
boolean writeable = isSDCardWriteable();
if (writeable) {
File file = new File(Environment.getDataDirectory() + "/data/" + packageName + "/databases/" + MySQLiteOpenHelper.getDatabaseName());
File fileBackupDir = new File(Environment.getExternalStorageDirectory(), appName + "/backup");
if (!fileBackupDir.exists()) {
fileBackupDir.mkdirs();
}
if (file.exists()) {
File fileBackup = new File(fileBackupDir, MySQLiteOpenHelper.getDatabaseName());
try {
fileBackup.createNewFile();
FileUtils.copyFile(file, fileBackup);
rc = true;
} catch (IOException ioException) {
//
} catch (Exception exception) {
//
}
}
}
return rc;
}
private boolean isSDCardWriteable() {
boolean rc = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
rc = true;
}
return rc;
}
public MyDatabaseTools(final Context context, final String appName) {
this.appName = appName;
packageName = context.getPackageName();
}
}
這個例子與我在研究中發現的例子類似。我可能會這樣。謝謝您的幫助! – dirkvranckaert
這沒有提到恢復數據庫。 –
@Harald,我明白你的答案。它有助於開發它。但你可以分享你的建議,當我們必須將數據庫移動到另一個目錄,如卸載時間安裝時間等?等待你的積極反饋 –