GreenDao的交易

Tom*_*mCB 3 android transactions rollback greendao

我正在使用GreenDao来存储来自REST服务的大量数据.

我的很多实体都与关系联系在一起.一切都很好,但明天我必须实现rockolid工作流程.

当我加载数据时,我必须检查是否发生错误.如果是这样,我必须确保SQLite DB中没有存储任何内容.

通常我会在发生异常的情况下使用事务回滚,否则将提交到db.

现在我只使用insertordelete来保存实体,每次我创建一个对象.

实现这个的方法是什么?

Ale*_*exS 12

在插入和更新时,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();
}
Run Code Online (Sandbox Code Playgroud)

我也稍微调整了我的greendao,以便它不会缓存插入的对象以获得进一步的性能和memoryusage好处(因为我插入了大量数据,因为我在运行时只使用很少的数据,具体取决于用户输入).看这篇文章.