我正在使用 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 进行了一些调整,以便它不会缓存插入的对象以获得进一步的性能和内存使用优势(因为我一次插入了大量数据,并且我在运行时仅根据用户输入使用很少的数据)。请参阅 this 帖子。

关于android - GreenDao 中的交易,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25189764/

10-12 01:39