我需要解决这个问题。

我从一个错误的概念开始了我的项目,即在发现冲突时ON CONFLICT REPLACE会更新行内容。我也在想,在那个插入中(有冲突),如果我不为列添加值,它将不会执行替换,但会保留旧值。相反,我只是发现ON CONFLICT REPLACE(如果发现冲突)将执行delete-> insert,并且如果找不到列的值(我在其中输入null表示不更新字段),它将替换null值与默认列值,以便成功进行插入。

所以知道我有这个大的根本问题:D

如您所知,我想达到的目标是:

我总是执行插入操作,如果它已经发现具有相同唯一键的行(冲突),则只会更新值。如果对于某个字段,它将找不到值(我没有将其放在ContentValues中),则它不会更新这些字段,但会保留旧的字段(就像普通的更新查询一样,您不会在其中放置用于更新的列)。

为了解决我的问题,我提出以下解决方案:

  • 冲突更新(仅当您只有1个唯一身份时才有效
    字段,如果您有两个或多个引发冲突的唯一字段
    它将崩溃)
  • 在失败插入时进行更新,在该处总是尝试进行更新。如果由于找不到与记录相关的行而失败(数据库中尚不存在),它将尝试插入

  • 有人已经考虑了这个问题并有解决方案?
    也许我们可以尝试找到解决方案:)

    我认为最好的方法是将事物保持在较低级别(数据库级别),以保持良好的性能水平。

    最佳答案

    遵循SQLite3官方文档不可能自动执行ON CONFLICT UPDATE,而只能自动执行DELETE-> INSERT(新值)之类的REPLACE。

    07-27 14:04