1

将数据存储在位于 Android 智能手机文件系统上的 sqlite 文件中的推荐方法是什么?我打算在设备重启后恢复数据。“DaoMaster.createAllTables(db, true)”和“DaoMaster.createAllTables(db, false)”有什么区别?

目前我在 MainActivity.java 中使用此代码:

db = SQLiteDatabase.openOrCreateDatabase(new File(getExternalFilesDir(null).getPath(),
            "opendao.sqlite"), null);
daoMaster = new DaoMaster(db);
DaoMaster.createAllTables(db, true);
daoSession = daoMaster.newSession(db);
locationEntityDao = daoSession.getLocationEntityDao();
locationTraceEntityDao = daoSession.getLocationTraceEntityDao();
photoEntityDao = daoSession.getPhotoEntityDao();
photosEntityDao = daoSession.getPhotosEntityDao();
poiEntityDao = daoSession.getPoiEntityDao();
primitiveAttributesEntityDao = daoSession.getPrimitiveAttributesEntityDao();

我不得不修改生成的 DaoMaster.java:

public DaoSession newSession(SQLiteDatabase db) {
    return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
}
4

1 回答 1

0

我不太确定我是否理解你的问题。“设备重启”是什么意思?恢复出厂设置?您是否按照greenDao 网站上的说明进行操作?我一直在使用greenDao 并且我从未修改过生成的DaoMaster,它应该可以正常工作。阅读代码,当你使用默认的 daoMaster.newSession() 时,使用的 db 是创建 daoMaster 时使用的,所以你的修改应该没有必要。

对于第二个问题,如果您遵循生成的代码,您将看到在 createAllTables(SQLiteDatabase db, boolean ifNotExists) 中设置 true 或 false ifNotExist 参数之间的区别。此布尔值确定是否应创建数据库中的每个表(如果已存在)。设置为 true,如果表已经在数据库中,则此 CREATE 命令将无效。

于 2015-02-18T18:18:30.983 回答