我使用GreenDao来存储来自REST服务的大量数据。
我的许多实体都与关系联系在一起。一切都很顺利,但是明天我必须执行一个可靠的工作流程。
当我加载数据时,我必须检查是否发生错误。如果是这样,我必须确保在SQLite DB中没有存储。
通常情况下,我将使用事务和回滚来处理异常,现在我只是使用insertordelete来保存一个实体,每次我创建一个对象。
实现的方法是什么?
在插入和更新时,Greendao检查是否有正在进行的事务。如果是这种情况,greendao将不会启动新的事务。
所以唯一要做的就是在数据库上启动一个事务,并在工作完成或注意到错误后提交/回滚。所有的插入和更新都将在同一个事务中,这在数据一致性和性能方面都有好处,因为greendao将为每个插入和更新操作启动带有commit/rollback的新事务。
总结一下,你可以使用如下代码:SQLiteDatabase db = dao.getDatabase();
db.beginTransaction();
try {
// do all your inserts and so on here.
db.setTransactionSuccessful();
} catch (Exception ex) {
} finally {
db.endTransaction();
}
我还稍微调整了greendao,这样它就不会缓存插入的对象,从而获得进一步的性能和内存使用优势(因为我一次插入大量数据,并且在运行时只使用很少的数据,这取决于用户输入)。