2013-04-10 33 views
2

我有一个SQLite数据库,我想在我的Android应用程序中使用。Android和SQLite,读取数据库的设备出错

首先,我从资产复制我的数据库/数据/数据//数据库/使用:

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

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

+1

为什么不使用'File file = Context.getDatabasePath(“name_of_db”);'(而不是硬编码文件路径),那么如果文件不存在'file.mkdirs();'然后复制从资产? – Selvin 2013-04-10 10:48:29

+0

已经提出了类似的问题。有用的阅读:http://stackoverflow.com/questions/513084/how-to-ship-an-android-application-with-a-database,和http://stackoverflow.com/questions/9109438/how-to-使用-的现有数据库与 - 的 - Android的应用程序 – 2013-04-10 10:55:25

+1

包已经被写入,以帮助管理数据库:https://github.com/jgilfelt/android-sqlite-asset-helper – 2013-04-10 10:56:27

回答

0

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

File file = Context.getDatabasePath(“name_of_db”);

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

0

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