GreenDao insertOrReplace和save的区别

使用数据库插入数据时,使用insert会发生因为key值(通常是id)重复的异常。我们当然想通过一个简单的方法:有该数据时则更新,没有该数据时则插入的“有更无插”的方法,在GreenDao有两个方insertOrReplacesave,可两者是有区别的

  • insertOrReplace:传入的对象在数据库中,有则更新无则插入。推荐同步数据库时使用该方法。
  • save:类似于insertOrReplace,区别在于save会判断传入对象的key,有key的对象执行更新,无key的执行插入。当对象有key但并不在数据库时会执行失败,适用于保存本地列表

save方法

/**
 * "Saves" an entity to the database: depending on the existence of the key property, it will be inserted
 * (key is null) or updated (key is not null).
 * <p>
 * This is similar to {@link #insertOrReplace(Object)}, but may be more efficient, because if a key is present,
 * it does not have to query if that key already exists.
 */
public void save(T entity) {
    if (hasKey(entity)) {
        update(entity);
    } else {
        insert(entity);
    }
}

可以看出,save只判断了对象key是否存在,并不会去查询数据库。当对象有key但并不在数据库时,执行update语句不会有数据得到更新。

适用场景

  • 只有本地数据库,且key默认由数据库生成。直接使用save就好
  • 插入的数据有key,其实这种情况通常是同步线上数据到本地数据库时的情况,因为直接使用了远程的key,所以不能使用save,必须使用insertOrReplace。

结论:在确保插入数据有key且存在于数据库的情况下,适用save更高效。其他情况一律适用insertOrReplace

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/11/difference-between-greendao-insertorreplace-and-save/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
GreenDao insertOrReplace和save的区别
使用数据库插入数据时,使用insert会发生因为key值(通常是id)重复的异常。我们当然想通过一个简单的方法:有该数据时则更新,没有该数据时则插入的“有更无插……
<<上一篇
下一篇>>
文章目录
关闭
目 录