我正在从数据库表中删除一些行。然后我想更新其他行的ID。
例如,这是我的表格:
id | name
1 | aaaa
2 | bbbb
3 | cccc
4 | dddd
现在我删除第3行。我想得到一个这样的表:
id | name
1 | aaaa
2 | bbbb
3 | dddd
但是我得到了这张表:
id | name
1 | aaaa
2 | bbbb
4 | dddd
这是我的代码:
SparseBooleanArray checkedItemPositions = getListView()
.getCheckedItemPositions();
int itemCount = getListView().getCount();
int[] tab = new int[itemCount];
for (int i = itemCount - 1; i >= 0; i--) {
tab[i] = itemCount - i;
if (checkedItemPositions.get(i)) {
adapter.remove(list.get(i));
db.deleteMyPlace(new MyPlacesTable(tab[i]));
}
}
删除方法
public void deleteMyPlace(MyPlacesTable myPlace) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_MY_PLACES, KEY_ID + " = ?",
new String[] { String.valueOf(myPlace.getID()) });
db.close();
}
我该怎么办?
答案 0 :(得分:1)
删除密钥时,需要将所有大于1的值重新编号。如果这听起来很昂贵,那就是因为它。 BTW您还必须重新编号对这些ID的所有引用。
较便宜的替代方法是将最后一个条目移动到已删除的条目。这减少了需要更改的条目数,但更新的复杂性和要更改的表的数量是相同的。
通常最简单的解决方案是不更改ID,因为他们不需要花费任何空白或创建新ID。然而,对它们进行重新编号是昂贵且难以正确的。