【问题标题】:Is it necessary to modify my SQLite database for use in android app?是否有必要修改我的 SQLite 数据库以在 android 应用程序中使用?
【发布时间】:2017-04-07 00:38:40
【问题描述】:

我的 sqlite 数据库上有一些数据,但我在这个博客 (http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/) 中读到,这些表必须有一个名为 _id 的行,因此 android 可以绑定该字段(不确定这意味着什么)但我觉得这很麻烦,因为它的数据库有点复杂,所以我想知道我是否真的需要修改我的数据库,或者有其他方法可以解决这个问题。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    如果您使用CursorAdapter 或其任何子类,您的Cursor 必须有一个_id 整数列,最好是唯一的。

    您的选择是:

    1. _id(例如,作为AUTOINCREMENT 列)添加到您的表中并将其包含在您的查询中

    2. 在查询中的表中重命名某些列,例如 SQLite 的 ROWID(例如,SELECT ROWID AS _id, ... FROM table WHERE ...),因为重要的是 Cursor 中的内容

    3. 尝试为 _id 返回一个固定值(例如,SELECT _id=0, ... FROM table WHERE ...),虽然我从未尝试过,也不知道它是否有效

    4. 不要使用CursorAdapter 或其任何子类

    【讨论】:

    • 所以如果我在我的表中添加 _id 行,并且我没有将其声明为主键,它仍然会按计划工作还是应该是主键?
    • @sebastianhrp:我认为AUTOINCREMENT 必须用于主键。但是,我忘记了 ROWID——请参阅列表中更新的项目 #2。
    【解决方案2】:

    不,你绝对可以继续使用你的数据库。

    至于“_id”字段,它在许多适配器中用于找到放置项目的正确位置(例如在列表和微调器中),但也有解决方法可以解决它的缺失,而且它们是仅用于访问您的数据。

    缺少 _id 的常见解决方案,顺便说一句,使用如下查询重命名行的索引(如果它存在且不称为“_id”):

    SELECT index AS _id IN table;
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2017-01-09
      • 2012-04-16
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多