2012-05-25 79 views
0

我使用SQL数据库在我appliaction,在我想拿database.I的备份有以下疑点:数据库备份的Android

1.I正在运行的仿真器的应用,用于检测是否我必须插入一些外部存储器来检查,如果不在我的系统中,我该如何检查。 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

文件扩展名(.db)缺少在上面摘录:在安卓

currentDBPath = "\\\data\\\com.budget\\\databases\\\budget.db"; 
+0

感谢Harald ..但在我的情况下,if(sd.canWrite()) - >本身显示为false,因此它不会进入该if循环。 – subbu

0

数据备份Documentation。 如果您的Android应用程序有一个数据库,并且您希望您的用户能够备份数据库并按照他们认为合适的方式进行恢复,那么您需要熟悉数据库文件。

下面是一个名为DbExportImport的类。一旦你设置了正确的值,你需要做的就是从你的应用程序中调用exportDb(),importDb()或者restoreDb()来执行必要的操作。 (More

由于您的应用程序将被新安装并且您将丢失数据库,因此在更改应用程序签名的软件包名称或密钥时,这也可用作临时措施。

但是,如果需要,可能需要直接扩展BackupAgent:*备份数据库中的数据。如果您有用户重新安装应用程序时想要恢复的SQLite数据库,则需要构建自定义的BackupAgent,以在备份操作期间读取适当的数据,然后创建表并在还原操作期间插入数据( More)。

现在你也可以从SD卡Backup and restore SQLite database to sdcard

这里备份是另一种解决方案就像你的problem

+0

感谢Google_Android_Lovers.How我可以知道一个SD卡是否存在或不存在。现在我正在模拟器中运行应用程序,所以如何检查数据库packup.Whether我不得不插入一些外部内存来检查。另外在我的情况外部存储状态显示为“已删除”。 – subbu

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>