我总是用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,我明白你的答案。它有助于开发它。但你可以分享你的建议,当我们必须将数据库移动到另一个目录,如卸载时间安装时间等?等待你的积极反馈 –