2012-01-07 59 views
6

我需要解决这个问题。Android SQLite ON CONFLICT UPDATE有可能吗?

我从一个错误的概念开始我的项目,即当冲突发生时,ON CONFLICT REPLACE将更新行内容。此外,我想在插入(与冲突),如果我没有为一列的价值,它不会做替换,但保持旧的价值。相反,我刚刚发现ON ON CONFLICT REPLACE如果发现冲突,它将执行delete-> insert,并且如果它找不到列的值(我将null置于不更新字段),它将替换null值与默认列值以便成功插入。

所以知道我有这样大的根本问题:当你明白我想达到这是d

我总是做插件,如果发现已经是行具有相同的唯一密钥(冲突)它只会更新值。如果对于一个字段,它不会找到这些值(我不把它放在ContentValues中),它不会更新这些字段,而是保留旧的字段(就像一个正常的更新查询,你不用更新列)。

为了解决我的问题,我因子评分这些解决方案:

  • ON冲突的更新(当你只有1独特 领域,如果你有2个或更多唯一字段抛出冲突这只会工作 它将崩溃)
  • UPDATE ON FAIL INSERT它始终尝试进行更新。如果它失败是因为它找不到与记录相关的行(它还没有存在于数据库中),它会尝试执行插入操作

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

我认为最好的办法是保持低水平(db级别)的东西,以保持良好的性能水平。

+0

你会发现这里的好主意:http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace – 2012-09-27 14:56:57

回答

7

以下SQLite3官方文档是不可能自动做一个ON CONFLICT UPDATE,但只有一个REPLACE就像DELETE - > INSERT(新值)。