GreenDao中的事务处理

4
我正在使用GreenDao存储大量从REST服务获取的数据。我的许多实体都与关系连接在一起,一切工作得很好,但明天我必须实现一个非常可靠的工作流程。当我加载数据时,我必须检查是否发生错误。如果是这样,我必须确保在SQLite数据库中没有存储任何内容。通常情况下,如果发生异常,我会使用事务和回滚来处理,否则提交到数据库。目前,每次创建一个对象时,我都只使用insertordelete来保存实体。如何实施这一点呢?
1个回答

14

在插入和更新时,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,这样它就不会缓存插入的对象,以获得更好的性能和内存使用效益(因为我一次插入大量数据,而运行时仅根据用户输入使用很少的数据)。请查看帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接