2013-04-10 34 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」。