首页 > 解决方案 > 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 知识

标签: android-room

解决方案


如果您编码或省略,更新将不会插入未找到的记录(行)OnConflictStrategy.REPLACE。更新只能作用于存在的行

如果 WHERE 子句对于表中的任何行都没有计算为真,这不是错误 - 这只是意味着 UPDATE 语句影响零行。https://sqlite.org/lang_update.html


推荐阅读