批量作业 - 暂时违反约束

时间:2016-10-23 17:17:10

标签: android sqlite android-contentprovider

让我们考虑一个具有唯一约束和以下值的列:

Col1
1
2
3

现在我想将批处理作业中的值更改为以下内容:

Col1
2
3
4

结果是,只要我将1更改为2,就会违反唯一约束并停止批处理作业。虽然在完成批处理作业后,约束将再次完成。

我该如何解决这个问题?

用例

我正在尝试通过contentResolver.applyBatch(MediaStore.AUTHORITY, operations)重命名媒体商店中的文件列表,这会引发约束违规异常......

1 个答案:

答案 0 :(得分:1)

在重命名元素可能导致唯一列发生冲突的情况下,您需要以安全的顺序应用转换。

基本上不是要求内容提供商执行以下操作

rename 1 → 2
rename 2 → 3
rename 3 → 4

你应该问

rename 3 → 4
rename 2 → 3
rename 1 → 2

始终满足唯一约束。

即使没有唯一约束,第一种方法也可能将所有内容重命名为4