android-room - OnConflictStrategy.REPLACE 对更新和插入的工作方式是否相同?
问题描述
我们有以下遗留代码
interface BaseDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertOrReplace(data: T): Single<Long>
@Update(onConflict = OnConflictStrategy.REPLACE)
fun update(data: T): Single<Long>
}
这些功能会达到相同的结果吗?虽然我确定@Insert(onConflict = OnConflictStrategy.REPLACE)
基于我的一般 SQL 知识
- 如果发现替换/更新记录
- 如果找不到则插入记录
解决方案
如果您编码或省略,更新将不会插入未找到的记录(行)OnConflictStrategy.REPLACE
。更新只能作用于存在的行
如果 WHERE 子句对于表中的任何行都没有计算为真,这不是错误 - 这只是意味着 UPDATE 语句影响零行。https://sqlite.org/lang_update.html
推荐阅读
- css - Tailwind:使用空白行前实用程序时尊重动态高度?
- python - pydictor 中的命令行选项,用于生成仅具有唯一字母的 worldist
- python - 读取文本文件行中的第一个单词时出现 IndexError
- swift - Swift将完成处理程序与返回值结合起来
- visual-studio-code - 如何使用 livewire 修复 Laravel 8 中未定义的“布局”方法
- android - 如何修复屏幕末尾的按钮
- javascript - 用函数创建对象并在JS中返回对象
- visual-studio-code - 如何在 Visual Studio Code 的多个编辑器窗格中应用 editor.selectionBackground?
- php - 传递给 Symfony\Component\Form\FormRenderer::searchAndRenderBlock() 的参数 3 必须是数组类型,给定字符串,在 C:\Users\ 中调用
- flutter - 将经过身份验证的用户添加到 firestore 'users' 集合颤动