【问题标题】:Issues in caching internal SQLITE rowid in Android在 Android 中缓存内部 SQLITE rowid 的问题
【发布时间】:2012-04-17 08:22:03
【问题描述】:

我正在开发一个使用 SQLITE 作为数据库的 android 2.3.3 应用程序。我目前正在使用 internal ROWID in sqlite更新我的行并检索数据。我最近发现我的行的内部 ROWID 有时会发生变化。我不知道原因。问题是我正在缓存这个 ROWID 以便稍后执行更新操作。所以如果 ROWID 发生变化,我可能会更新错误的行。

我认为有两种解决方案。

(1)防止内部 ROWID 发生变化(我不知道如何实现)。还有人可以告诉我是什么导致了这个 ROWID 变化吗?

(2)定义一个 INTEGER PRIMARY KEY 列并将其用作 ROWID。

让我知道是否可以阻止 rowid 更改,否则我将采用第二种解决方案。

谢谢!

【问题讨论】:

    标签: android sqlite rowid


    【解决方案1】:

    您应该使用 INTEGER PRIMARY KEY 作为行 ID。

    您可以发布您现在使用的表定义吗?您使用的值不应更改,除非 a) 您正在更改它或 b) 您以某种奇怪的方式定义它。

    【讨论】:

    • 正如我所提到的,我使用的是 sqlite 内部 rowid
    【解决方案2】:

    我猜你的应用程序中有一个过程,它压缩数据库(真空),如果在压缩执行之前有删除,这可能会改变 rowid

    【讨论】:

    • 我的应用程序没有任何进程。不知道操作系统中是否有执行此操作的内部进程。
    • 我现在明白你在做什么了。您应该阅读有关内部 ROWID 的 SQLite 文档,看看它是否适用于您的情况:sqlite.org/autoinc.html。您可能正在删除具有最大 ROWID 值的行,这将导致 ROWID 算法以意想不到的方式运行。
    猜你喜欢
    • 2018-03-07
    • 2017-06-30
    • 1970-01-01
    • 2011-12-07
    • 2019-10-09
    • 2014-05-31
    • 1970-01-01
    • 2023-03-04
    • 2011-11-22
    相关资源
    最近更新 更多