2

我有一个 SQLite 数据库,我想在我的 Android 应用程序中使用。

首先,我将我的数据库从 Assets 复制到 /data/data//databases/ 使用:

private void copyDBFromAsssetsToDataFolder()
    {
        try 
        {
            String destPath = "/data/data/" + getPackageName() + "/databases/dbname.db";

            File f = new File(destPath);
            if(!f.exists())
            {
                Log.v("TAG","File Not Exist");
                InputStream in = getAssets().open("dbname.db");
                OutputStream out = new FileOutputStream(destPath);

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

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            Log.v("TAG","ioexeption");
            e.printStackTrace();
        }}

我的所有查询在模拟器中都可以正常工作,但在我收到的设备中:

打开目录时出错:/data/data/packagename/databases/

在这里,我正在阅读有同样问题的人,解决方案始终是为此目录分配权限或将数据库复制到外部存储。但在生产中,用户不必拥有 SD 卡,或者您不能强制用户为数据库(或其他)目录分配权限。

使用已经创建的数据库的最佳解决方案是什么?

4

2 回答 2

0

我使用@Selvin 建议没有问题。

文件 file = Context.getDatabasePath("name_of_db");

如果文件不存在 file.mkdirs();

于 2013-04-11T09:52:37.273 回答
0

您首先必须在 /data/data/packagename 中创建目录“databases”。

于 2013-04-10T10:41:05.873 回答