我正在使用GreenDao存储大量从REST服务获取的数据。我的许多实体都与关系连接在一起,一切工作得很好,但明天我必须实现一个非常可靠的工作流程。当我加载数据时,我必须检查是否发生错误。如果是这样,我必须确保在SQLite数据库中没有存储任何内容。通常情况下,如果发生异常,我会使用事务和回滚来处理,否则提交到数据库。目前,每次创建一个对象时,我都只使用insertordelete来保存实体。如何实施这一点呢?
在插入和更新时,GreenDao会检查是否存在正在进行的事务。如果存在,则GreenDao不会启动新的事务。
因此,唯一需要做的就是在数据库上启动一个事务,在完成工作或注意到错误后提交/回滚。所有插入和更新都将在同一个事务中进行,这对于数据一致性和性能都有好处,因为GreenDao将为每个插入和更新操作启动具有提交/回滚功能的新事务。
简而言之,您可以使用以下代码:
SQLiteDatabase db = dao.getDatabase();
db.beginTransaction();
try {
// do all your inserts and so on here.
db.setTransactionSuccessful();
} catch (Exception ex) {
} finally {
db.endTransaction();
}
我还微调了我的greendao,这样它就不会缓存插入的对象,以获得更好的性能和内存使用效益(因为我一次插入大量数据,而运行时仅根据用户输入使用很少的数据)。请查看此帖子。