GreenDao insertOrReplace和save的区别
使用数据库插入数据时,使用insert会发生因为key值(通常是id)重复的异常。我们当然想通过一个简单的方法:有该数据时则更新,没有该数据时则插入的“有更无插”的方法,在GreenDao有两个方insertOrReplace
和save
,可两者是有区别的
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
0
二维码
打赏
海报
GreenDao insertOrReplace和save的区别
使用数据库插入数据时,使用insert会发生因为key值(通常是id)重复的异常。我们当然想通过一个简单的方法:有该数据时则更新,没有该数据时则插入的“有更无插……
文章目录
关闭
共有 0 条评论