Android和SQLite,读取数据库的设备出错

时间:2013-04-10 10:29:47

标签: android sqlite

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

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

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卡,或者您无法强制用户为数据库(或其他)目录分配权限。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

文件file = Context.getDatabasePath(“name_of_db”);

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