java - 在 Android 上的 SQLite 数据库中重置 AUTOINCREMENT?

标签 java android sqlite

<分区>

我在 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/

相关文章:

java - 使用 Java 从美国地址解析邮政编码

java - 有没有办法为我的加速度计创建启动和停止功能?

java - 从三个 Android 位置提供者给出最佳位置估计的方法

iphone - 遍历 SQLite_master 表并删除表

c# - 引用和读取 .sqlite 数据库文件 (C#/UWP)

Java AOT + 动态加载java类

java - 借鉴其他类的 JPanel

java - 语音识别API : How to get the voice features (MEL Coefficients)

android - 如何将 GCM 推送通知消息存储到 sqlite 数据库中?

java - 在java中着色字符串的指定字符