将数据库从文件移动到专用内部存储

时间:2014-01-23 11:36:51

标签: android database sqlite

我正在尝试将巨大的数据库文件(database.db)从 zip 从服务器下载到某个文件夹(外部/内部存储),加载 进入私人数据库存储我的应用程序并删除源文件(database.db.zip)。我已经下载并保存了源文件。

问题将数据库加载到私有存储。像“android-sqlite-asset-helper”之类的东西,但是这个图书馆只有一个特定的源文件夹,从中获取数据库文件 - > “assets / databases /”但我需要通过其他目录替换资产。这个库的其余部分在我的案例中完美无缺。有什么方法可以做我想要的吗?

1)使用android DownloadManager下载database.db文件 2)将database.db文件移动到/ data / data / package_name / databases / 3)加载数据库

1 个答案:

答案 0 :(得分:2)

public static void copyDatabase(Context c, String DATABASE_NAME) {
        String databasePath = c.getDatabasePath(DATABASE_NAME).getPath();
        File f = new File(databasePath);
        OutputStream myOutput = null;
        InputStream myInput = null;
        Log.d("testing", " testing db path " + databasePath);
        Log.d("testing", " testing db exist " + f.exists());

        if (f.exists()) {
            try {

                File directory = new File("/mnt/sdcard/DB_DEBUG");
                if (!directory.exists())
                    directory.mkdir();

                myOutput = new FileOutputStream(directory.getAbsolutePath()
                        + "/" + DATABASE_NAME);
                myInput = new FileInputStream(databasePath);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }

                myOutput.flush();
            } catch (Exception e) {
            } finally {
                try {
                    if (myOutput != null) {
                        myOutput.close();
                        myOutput = null;
                    }
                    if (myInput != null) {
                        myInput.close();
                        myInput = null;
                    }
                } catch (Exception e) {
                }
            }
        }
    }