2014-02-19 52 views
0

我試圖做一個簡單的例子,使用我自己的SQLite數據庫,android和greenDAO生成器來爲我的android應用程序生成類。當應用程序啓動時無法找到數據庫

我的數據庫文件中這樣定義:

1)創建一個名爲 「OneTableDB」 數據庫(不帶擴展,SQLite的3)具有以下結構:

實體:教授

  • 教授編號:primarykey
  • name:text
  • age:int

實體:android_metadata

  • 區域:文本與價值 'EN_US',並與幾排的實體

然後我填充android_metadata。

2)放置在我的Android應用結構內:proj_root /數據庫/ 完整路徑數據庫文件:proj_root /數據庫/ OneTableDB

3)我要檢查數據庫中是否存在與否(在方法我情況下,它必須存在,因爲我放在f.exists(),則返回假值,然後打破上

sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null, 
       SQLiteDatabase.OPEN_READONLY); 
內部數據庫文件夾)

private boolean databaseExists() { 
    SQLiteDatabase sqliteDatabase = null; 
    try { 
     String databasePath = DB_PATH + DB_NAME; 

     File f = new File(DB_PATH + DB_NAME); 
     f.exists(); 

     sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null, 
       SQLiteDatabase.OPEN_READONLY); 
    } catch (SQLiteException e) { 
     e.printStackTrace(); 
    } 

    if (sqliteDatabase != null) { 
     sqliteDatabase.close(); 
    } 
    return sqliteDatabase != null ? true : false; 
} 

//DB_PATH = /data/data/com.myapp.android_dao_tests/databases/ 

//DB_NAME = OneTableDB 

調試

在調試過程中,我使用adb shell檢查路徑是否正確,實際上我可以導航到/data/data/com.myapp.android_dao_tests/並且沒有數據庫文件夾!

任何想法如何解決這個問題?

在此先感謝?

+0

如果你的數據庫不存在,它可能只是從來沒有創建。我會在那裏尋找問題 - 你能發佈代碼來顯示你如何創建你的數據庫嗎? – PaF

+0

我已經創建了android項目之外的數據庫。我已經手動創建了這個數據庫。並複製到我的項目中的數據庫文件夾。 – Bugdr0id

+1

因此,您自己手動將DB文件放在那裏,但下次檢查時,該文件已不存在?您是否只在將文件複製到那裏後才安裝應用程序?嘗試先安裝應用程序,然後將數據庫文件複製到數據庫/文件夾,然後才運行應用程序(我希望應用程序在安裝時會刪除其內部文件夾(/data/data/com.myapp.android_dao_tests),所以這可能是丟失的DB文件的原因)。 – PaF

回答

1

數據庫「模板」保存在資產/文件夾中,以便將其捆綁到apk中。然後代碼將數據庫從資產/數據庫複製到數據庫/以使其可以作爲常規SQLite數據庫訪問。

經過進一步調查,似乎Android拒絕承認新的DB作爲自己的。顯然,內置的數據庫機制並不意味着以這種方式使用。

解決此問題的正確方法是將資料以文本格式保存在assets /中,以便如果應用程序啓動並且發現沒有數據庫,它將創建模式本身,並將其與數據填充到文本文件中來自資產/文件夾。

相關問題