Android SQLite ON CONFLICT UPDATE是可能的吗?

StE*_*rMi 7 sql database sqlite android

我需要解决这个问题.

我从错误的概念开始我的项目,ON CONFLICT REPLACE会在发现冲突时对行内容进行更新.另外我在想那个插入(有冲突)如果我没有为列添加值,它不会进行替换但保留旧值.相反,我刚刚发现ON CONFLICT REPLACE如果发现冲突它将执行delete-> insert并且如果它找不到列的值(我将null放置为不更新字段)它将替换null使用默认列值的值,以便成功插入.

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

如您所知,我希望达到的目的是:

我总是进行插入,如果它找到一个具有相同唯一键(冲突)的行,它将只更新值.如果对于一个字段,它不会找到值(我没有把它放在ContentValues中)它不会更新那些字段但保留旧字段(就像一个普通的更新查询,你没有放置列来更新它).

为了解决我的问题,我采用了这些解决方案:

  • ON CONFLICT UPDATE(仅当您只有1个唯一字段时才会起作用,如果您有2个或更多个唯一字段会引发冲突,它会崩溃)
  • 更新失败插入,它总是尝试进行更新.如果它失败,因为它找不到与记录相关的行(它还没有出现在数据库中),它会尝试插入

有人已经考虑过这个问题并有解决方案吗?或许我们可以尝试找到一个解决方案:)

我认为最好的方法是将事物保持在低级别(db级别)以保持良好的性能水平.

StE*_*rMi 8

在SQLite3之后,官方文档无法自动执行ON CONFLICT UPDATE,而只能执行类似DELETE - > INSERT(新值)的REPLACE.