Android 如何拥有SQLiteConstraintException:唯一约束在sqlite上进行更新?

Android 如何拥有SQLiteConstraintException:唯一约束在sqlite上进行更新?,android,sqlite,Android,Sqlite,我如何在sqlite中进行更新,才能拥有SQLiteConstraintException唯一约束 我正在尝试将我的guid放在小写位置 db.execSQL("update user SET id = LOWER(id)"); 由android.database.sqlite.SQLiteConstraintException引起:唯一 约束失败:user.id(代码1555) 检查表创建命令id必须定义为唯一,这是导致问题的原因 通常,一旦分配id,就不允许更改。当您第一次赋值时,请从创建

我如何在sqlite中进行更新,才能拥有SQLiteConstraintException唯一约束

我正在尝试将我的guid放在小写位置

db.execSQL("update user SET id = LOWER(id)");
由android.database.sqlite.SQLiteConstraintException引起:唯一 约束失败:user.id(代码1555)


检查表创建命令id必须定义为唯一,这是导致问题的原因


通常,一旦分配id,就不允许更改。当您第一次赋值时,请从创建表中删除UNIQUE,或者更改逻辑以降低id,因为您已将id定义为UNIQUE,并且UNIQUE约束为case INSESTIVE。 这就是为什么您会得到SQLiteConstraintException-UNIQUE-constraint
您必须更改逻辑,不允许在具有唯一约束的情况下更改案例。

唯一可能的原因是,至少有两行具有类似的
id
值,并且两行的小写字母相同(例如,
Johnduff
Johnduff
都将以
Johnduff
结尾)


你必须找到自己如何解决它;如果它们是重复的,删除一个,否则,给一个新的ID。

Txs Vicky供您回复。但由于是guid,它们必须是唯一的,而且我已经在db中有了更高的id。我现在正在插入较低的ID,但问题是如何将现有的较高ID修改为较低的。。。奇怪的是,它对其他表有效…比较不同表的CREATETABLE命令。然后你会找到罪犯。不能像插入后那样更新唯一列。请记住,唯一约束是否区分大小写取决于列的排序规则。@CL.yaa它取决于排序规则。但是,如果在创建表时没有排序规则,则它将抛出此异常。所有列都有排序规则,对于这样的问题,您应该添加有问题的表的模式(如CL所述,排序规则可能会影响一些事情)。另外,要么确认表上没有触发器(如果有,要么提供它们)。Txs CL,这应该是原因,也是很好的答案。。。您认为一个try-catch错误就足以避免重复吗?约束是为了防止编程错误而设计的;确定异常是否由约束冲突引起并不容易。如果您的程序需要重复,它应该显式地检查它们,然后执行任何需要执行的操作。