如何在内部存储上备份sqlite数据库

时间:2012-10-22 11:59:33

标签: android android-intent android-sdcard android-sqlite

我正在使用下面的代码将我的数据库复制到内部存储,但它并没有帮助我,总是得到这个错误。我经历了很多问题和答案,并尝试了很多博客文章,但我无法使其发挥作用。我的手机 HTC One X

我还在清单文件中添加了一项权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



public static boolean backUpDataBase(Context context)
    {
        String packageName = "com.projectWork.mobile";
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();

            if (Environment.MEDIA_MOUNTED.equals(sd))
            {
                String currentDBPath = "//data//"+ packageName +"//databases//"+"appDb.db";
                String backupDBPath = "appDb.db";
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);

                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                Toast.makeText(context, backupDB.toString(), Toast.LENGTH_LONG).show();

            }
        } catch (Exception e) {

            Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();


        }

        return true;
    }

这是我得到的错误

  

java.io.FileNotFoundException:/mnt/sdcard/appDb.db:open failed:   EROFS(只读文件系统)

请指导,因为我想将所有错误存储在数据库中,以便我们以后可以分析它们。

由于

1 个答案:

答案 0 :(得分:1)

试试这种方式。它在我身边起作用。

String currentDBPath = "\\data\\"+ packageName +"\\databases\\"+"appDb.db";

同时关注this post

感谢。