android复制数据库从内部到外部存储返回空数据库

时间:2012-01-31 11:41:00

标签: android database

我正在尝试将我的数据库从内部存储复制到外部,但它不是复制数据库。它只是创建一个新的空sqlite文件。我实际上缺少什么想法?

以下是我正在使用的内容:

    public static void copyFile(String currentDBPath, String backupDBPath){
    try {
        File sd = Environment.getExternalStorageDirectory();
        //File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            File currentDB = new File(currentDBPath);
            File backupDB = new File(backupDBPath);

            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) {
        e.printStackTrace();
    }
}

并像这样使用它:

File database = new File("/sdcard/Stam/Data/");
        database.mkdirs();
        RPCCommunicator.copyFile("/data/data/" + this.getPackageName()+ "/databases/stam_sys_tpl.sqlite","/sdcard/Stam/Data/system.sqlite");

所以使用它,它创建了system.sqlite,但它没有任何表是空的。我想要做的是将数据库从其当前目录移动到新目录而不丢失任何数据。

为什么它不能正常工作?

2 个答案:

答案 0 :(得分:2)

使用Context.getDataBasePath()获取您的db文件!

答案 1 :(得分:1)

您无法将数据库文件复制到外部存储设备。

您可以在外部存储中创建新数据库。

查询内部数据库并插入您创建的新数据库