我试图用一个简单的例子,用我自己的SQLite数据库,android和greenDAO生成器为我的Android应用程序生成类。
我的数据库文件是这样定义的:
1)创建一个名为“OneTableDB”的数据库(没有扩展名,SQLite 3),结构如下:
实体:教授
实体:android_metadata
然后我用值'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/并且没有数据库文件夹!
我知道如何解决这个问题?
提前谢谢?
答案 0 :(得分:1)
DB“模板”保存在assets /文件夹中,以便将其捆绑在apk中。然后,代码将数据库从assets /复制到数据库/,以使其可作为常规SQLite数据库访问。
经过进一步调查,似乎Android拒绝承认新数据库是自己的。显然,内置的DB机制并不是以这种方式使用的。
接近它的正确方法是将数据以文本格式保存在assets /中,这样如果应用程序启动并发现没有数据库,它将自己创建模式,并使用文本文件中的数据填充它。资产/文件夹。