2014-02-19 53 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 /中,以便如果应用程序启动并且发现没有数据库,它将创建模式本身,并将其与数据填充到文本文件中来自资产/文件夹。

相关问题