我在android中使用了一个自动递增_ID字段的SQLite数据库,但是当我从中删除一行时,_ID有一个缺失的数字,所以不是从1-9开始,它会变为1,2, 4,5,6,7,8,9,但我想要它做的是1 - 8!有没有办法做到这一点?对于令人困惑的问题感到抱歉,我无法弄清楚如何用它来表达它!
答案 0 :(得分:1)
我在android中使用SQLite数据库自动递增_ID 字段,但是当我从中删除一行时,_ID缺少一个数字 所以不是从1-9开始,而是1,2,4,5,6,7,8,9,而是什么 我想要它做的是1 - 8!有没有办法做到这一点?
一句话没有。你所描述的是正常行为。自动增量的内部迭代器没有内存,简单地说当一次生成id 3时,它不会再生成id 3而是下一个数字4.如果你应该生成id 1,2,3,4,5现在删除行如果id为5,则新插入的行将具有自动ID 6而不是5。
在大多数DMS中,这是正常行为。当然,你可以实现它,当你不使用自动增量,但明确添加ids,当它改变,所以你可以以编程方式提供行的更新,但这种方法不建议也非常“恶心”,因为在这种情况下你会有数百万在表中的行,你会更新所有的milion行,这个操作消耗太多时间,特别是对于设备来说这是不好的,因为它们的内存和电池都有一定的容量。
正如@Areks提到的,如果你使用关系表,你还必须更新引用,在大多数情况下它是不值得的。
注意:如果要使用自己定义的对象列表填充适配器,只需将SQLite中的row_id引用保存到每个对象中,然后当您想从ListView中删除行时,只需从行获取id并将其传递给delete方法的参数。