当前位置:  开发笔记 > 前端 > 正文

关于Android SQLite中的"_id"字段

如何解决《关于AndroidSQLite中的"_id"字段》经验,为你挑选了6个好方法。

Android SQLite中是否需要"_id"字段?



1> Al Sutton..:

当您使用使用Cursor的增强型适配器(例如ResourceCursorAdapter)时,_id非常有用.这些适配器使用它来提供一个ID,该ID可用于引用表中的特定行,该行将该项与任何适配器所用的项相关联(例如,ListView中的行).

如果您不打算在游标中使用需要_id列的类,则没有必要,您也可以使用"as _id"使另一列显示为在游标中称为_id.



2> Phil Lello..:

为什么不使用_ROWID_?

SQLite无论如何都为每行提供了这个,所以你可以在select语句中将它别名为_id.


@greenrobot,那是什么语法?

3> Aurora..:

从技术上讲,不需要该字段_id,但是如果您正在使用CursorAdapter该类(您可能正在使用该类,特别是如果您正在使用记事本示例)则是

"游标必须包含一个名为"_id"的列,否则此类将无效"

该文件另有说明这里.不幸的是,代码示例并未明确这一点.



4> Brad Hein..:

在许多情况下,拥有一个id字段非常方便.我更喜欢自动递增(如下所示).我一直在寻找id领域的新用途:)

当需要将数据附加到适配器时,我喜欢使用表名别名来查询id字段_id.示例:SELECT id _id, msg from message order by id.这样适配器就会看到一个叫做的字段_id,每个人都很开心.

这是我如何定义表格的示例:

CREATE TABLE message (_id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER, tripID TEXT, msg TEXT);


请注意,除非您想确保在数据库的生命周期内不会重复使用相同的id,否则不需要`AUTOINCREMENT`.http://www.sqlite.org/autoinc.html

5> itiskj..:

来自官方文档 ......

Cursor必须包含名为"_id"的列,否则此类将不起作用.此外,如果合并的游标在其"_id"列中具有重叠值,则使用MergeCursor与此类不起作用.

而且Cursor是:

此接口提供对数据库查询返回的结果集的随机读写访问.

换句话说,你需要_idAndroid SQLite(通常使用Cursor)



6> 小智..:

如果将_id列定义为自动递增整数,则它实际上是SQLite默认提供的ROWID列的别名(https://www.sqlite.org/lang_createtable.html#rowid).

您的create语句需要采用以下形式...

CREATE TABLE t(_id INTEGER PRIMARY KEY ASC, y, z);

证明这是有效的......

UPDATE t SET _id=22 WHERE _id=11;

然后

SELECT ROWID, _id FROM t;

你会发现两者_idROWID具有相同的价值.

请注意,如果在CREATE中使用DESC,则会创建一个新列,ROWID而不是别名.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有