【问题标题】:Reset AUTOINCREMENT in SQLite Database on Android? [closed]在 Android 上的 SQLite 数据库中重置 AUTOINCREMENT? [关闭]
【发布时间】:2013-03-13 07:41:46
【问题描述】:

我在 android 中使用 SQLite 数据库自动递增 _ID 字段,但是当我从中删除一行时,_ID 缺少一个数字,所以它不是从 1-9 变为 1,2, 4,5,6,7,8,9,但我想要它做的是从 1 到 8!有没有办法做到这一点?抱歉这个问题令人困惑,我不知道如何表达它!

【问题讨论】:

  • 也许这有帮助:stackoverflow.com/a/5600067/620338
  • AFAIK,SQLite 不支持。
  • 你为什么要这么做?
  • @CL。因为它们都被插入到列表视图中,我希望 row_id 和列表视图行在我删除它时保持同步。
  • 我不想对朋友粗鲁,但我担心“我希望它同步”还不够充分的理由......

标签: java android sqlite


【解决方案1】:

我在 android 中使用 SQLite 数据库,它会自动增加 _ID 字段,但是当我从中删除一行时,_ID 缺少一个数字 所以不是从 1 到 9,而是 1,2,4,5,6,7,8,9,但是什么 我想做的是从1到8!有没有办法做到这一点?

一个字不。您所描述的这是正常行为。 autoincrement的内部迭代器没有内存,简单说一次生成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 方法的参数。

【讨论】:

  • 另外,如果您使用的是关系表,您还必须更新引用,在大多数情况下这是不值得的。
  • @Areks 是的,我忘记写了,更新人。
  • 完美,感谢详细解释! :)
  • @WilliamL。不客气:)
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多