应用启动时无法找到数据库

时间:2014-02-19 10:46:01

标签: android database sqlite

我试图用一个简单的例子,用我自己的SQLite数据库,android和greenDAO生成器为我的Android应用程序生成类。

我的数据库文件是这样定义的:

1)创建一个名为“OneTableDB”的数据库(没有扩展名,SQLite 3),结构如下:

实体:教授

  • professorID:primarykey
  • name:text
  • age:int

实体:android_metadata

  • locale:text

然后我用值'en_US'和几行的实体填充android_metadata。

2)放在我的Android app结构里面:proj_root / databases / 数据库文件的完整路径:proj_root / databases / OneTableDB

3)我有一种检查数据库是否存在的方法(在我的情况下,它必须存在,因为我放在数据库文件夹中)

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

在f.exists()上调试,它返回false值然后中断

sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
                SQLiteDatabase.OPEN_READONLY);

在调试过程中,我使用adb shell检查路径是否正确,实际上我可以导航到/data/data/com.myapp.android_dao_tests/并且没有数据库文件夹!

我知道如何解决这个问题?

提前谢谢?

1 个答案:

答案 0 :(得分:1)

DB“模板”保存在assets /文件夹中,以便将其捆绑在apk中。然后,代码将数据库从assets /复制到数据库/,以使其可作为常规SQLite数据库访问。

经过进一步调查,似乎Android拒绝承认新数据库是自己的。显然,内置的DB机制并不是以这种方式使用的。

接近它的正确方法是将数据以文本格式保存在assets /中,这样如果应用程序启动并发现没有数据库,它将自己创建模式,并使用文本文件中的数据填充它。资产/文件夹。