<分区>
我在 android 中使用一个自动递增 _ID 字段的 SQLite 数据库,但是当我从中删除一行时,_ID 有一个缺失的数字,所以它不是从 1-9 而是 1,2, 4、5、6、7、8、9,但我想让它做的是从 1 到 8!有没有办法做到这一点?很抱歉这个问题令人困惑,我不知道该如何表达!
<分区>
我在 android 中使用一个自动递增 _ID 字段的 SQLite 数据库,但是当我从中删除一行时,_ID 有一个缺失的数字,所以它不是从 1-9 而是 1,2, 4、5、6、7、8、9,但我想让它做的是从 1 到 8!有没有办法做到这一点?很抱歉这个问题令人困惑,我不知道该如何表达!
最佳答案
I'm using a SQLite database in android that auto increments the _ID field, but when I remove a row from it, the _ID has a missing number so instead of it going from 1-9 it would go 1,2,4,5,6,7,8,9, but what I want it to do is go from 1 - 8! Is there a way to do this?
一言不发。您所描述的是正常行为。自动增量的内部迭代器没有内存,简单地说当一次生成 id 3 时,它不会再次生成 id 3 而是下一个数字 4。如果你应该生成 ids 1,2,3,4,5 现在删除行使用 id 5,新插入的行将具有自动 id 6 而不是 5。
在大多数 DMS 中,这是正常行为。可以肯定的是,当您不使用自动增量但显式添加 id 并且当它发生变化时您可以实现它,以便您可以以编程方式提供行的更新,但不推荐这种方法并且也非常“病态”,因为在这种情况下你会有 milion表中的行,你会更新所有的百万行,这个操作太耗时了,特别是对于设备来说,这不是很好,因为它们的内存和电池容量有限。
而且正如@Areks 提到的,如果您使用关系表,您还必须更新引用,这在大多数情况下是不值得的。
注意:如果您使用自己定义的对象列表填充适配器,您只需将 SQLite 中的 row_id 引用保存到每个对象中,然后当您想要从 ListView 中删除行时,只需从行中获取 id并将其传递给 delete 方法的参数。
关于java - 在 Android 上的 SQLite 数据库中重置 AUTOINCREMENT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379526/