我在我的appliaction中使用Sql数据库,因为我想备份数据库。我有以下疑问:
1.我在模拟器中运行应用程序,检查是否必须插入一些外部存储器进行检查,如果不在我的系统中,我该如何检查。 2.我在我的应用程序中使用了以下代码,因为sdcard.write选项显示为false,这里有什么错误。
Follwing是我的代码:
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
java.lang.System.out.println("data="+sd.getAbsolutePath());
java.lang.System.out.println("data="+sd.canWrite());--->Showing as false
if (sd.canWrite()) {
String currentDBPath = "\\data\\com.budget\\databases\\budget";
String backupDBPath = "budget";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
java.lang.System.out.println("backup="+backupDB.getAbsolutePath());
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
}
答案 0 :(得分:0)
上面的摘录中缺少文件扩展名(.db
):
currentDBPath = "\\\data\\\com.budget\\\databases\\\budget.db";
答案 1 :(得分:0)
android中的数据备份Documentation。 如果您的Android应用程序有一个数据库,并且您希望您的用户能够备份数据库并按照他们认为合适的方式进行恢复,那么您将需要搞乱数据库文件。
下面是一个名为DbExportImport的类。一旦使用正确的值设置它,您需要做的就是从应用程序调用exportDb(),importDb()或restoreDb()来执行必要的操作。
在更改应用程序签名的程序包名称或密钥时,这也是一种临时措施,因为您的应用程序将被新安装,并且您将丢失数据库。(More)。
但是,如果需要,可能需要直接扩展BackupAgent:*备份数据库中的数据。如果在用户重新安装应用程序时有要还原的SQLite数据库,则需要构建一个自定义BackupAgent,在备份操作期间读取相应的数据,然后创建表并在还原操作期间插入数据( More)。
现在您也可以从sdcard Backup and restore SQLite database to sdcard
进行备份这是另一种解决方案,就像您的problem。
答案 2 :(得分:0)
如果您使用的是Eclipse,请转到Window - Android Virtual Device Manager,选择您正在使用的AVD,然后单击编辑,在硬件选项中选择新建,然后选择SD卡支持。然后,只需定义存储大小,然后单击“编辑AVD”以保存更改。 要检查sd是否已挂载,请使用:
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
//code for sd mounted
}else{
//code for sd not mounted
}
检查您是否在清单中设置了权限。
<manifest ...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>