如何从应用程序检索数据库备份?

时间:2014-02-11 16:49:08

标签: java android eclipse sqlite ddms

我试图将我的应用数据库从存储数据复制到任何外层floder 但是我收到了一些错误。

我的设备已植根,我使用了谷歌播放的许多应用程序来控制数据/数据,但它已空,我使用了此代码:

 public void backup() {
        try {
            File sdcard = Environment.getRootDirectory();
            File outputFile = new File(sdcard,
                    "YourDatabase.db");

            if (!outputFile.exists()) 
                 outputFile.createNewFile(); 

            File data = Environment.getDataDirectory();
            File inputFile = new File(data,
                    "data/"+LoginActivity.this.getPackageName()+"/databases/"+"HafilTC.db");
            InputStream input = new FileInputStream(inputFile);
            OutputStream output = new FileOutputStream(outputFile);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
            output.flush();
            output.close();
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
            throw new Error(e.toString());
        }

android mainfilfist:

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

错误日志:

02-11 18:38:16.213: E/AndroidRuntime(21338): java.lang.Error: java.io.IOException: open failed: EROFS (Read-only file system)

3 个答案:

答案 0 :(得分:1)

问题是Environment.getRootDirectory()没有返回SD卡的根目录。它返回您无法写入的根OS目录。

您应该使用Environment.getExternalStorageDirectory(),它将返回用户外部存储目录的根目录(可能是也可能不是SD卡,具体取决于设备)。

答案 1 :(得分:0)

这里至少有两个选项。

使用DDMS

打开Eclipse,切换到DDMS透视图。

遵循路径:

DDMS--> file explorer-->data--> data--> your package name-->databases

你的数据库应该在数据库文件夹中,因为你在root设备上就可以得到它。

使用ADB

通过USB连接设备并启用USB debig后,即可使用ADB。要检查您的设备是否正确连接,请使用:

adb devices

比使用这些命令获取数据库(您将其复制到SDCARD,然后直接从那里读取):

adb -d shell
run-as your.package.name
cat /data/data/your.package.name/databases/database_name.db > /sdcard/your_db_name.db

如果您想以编程方式进行操作,请查看@Tanis.7x建议的内容。

答案 2 :(得分:0)

通过从。删除.db解决了该问题     HafilTC.db

使其成为文件名:HafilTC