5

这是我用来创建表的查询

create table site_table(
   _id integer primary key autoincrement,
   name_site text,
   url text,
   login text,
   pass text
);

我打电话Cursor.getColumnNames()并注意到列顺序是id, login, pass, name, url.

所以,如果我想要一个值,我必须通过 index 来获取它Cursor.getString(index)。在我调试之前,我一直在搞砸调用错误的索引,但现在我想知道,为什么 SQLite 会这样保存?为什么它不遵循我创建的方式id, name_site, url, login and pass

谢谢

4

4 回答 4

5

所以,如果我想要一个值,我必须通过索引 Cursor.getString(index) 来获取它

因此,例如出于这个原因,您应该始终使用

c.getString(c.getColumnIndex("ColName")); // or better getColumnIndex(CONSTANT)

这种方法可以拯救我们所有人,并确保您永远不会得到错误的结果。通常建议使用这种方法,并且在单独的类中存储COLUMN_NAMES也是CONSTANTS非常非常有用和有效的做法。

注意:顺序取决于投影,即select name, lastname from table

于 2013-03-31T18:13:35.097 回答
1

该数据按您在查询中请求的顺序排序,而不是您创建表的顺序。因此,您可能更改了查询中生成所述游标的顺序。

于 2013-03-31T18:10:51.217 回答
1

光标中的列顺序取决于投影。为确保您使用正确的列索引,请使用光标c.getString(c.getColumnIndexOrThrow("COLUMN_NAME"))在哪里。c

于 2013-03-31T18:13:03.897 回答
0

我只是亲身体验了一下:

游标的列的索引作为 a 的结果

SELECT * FROM mytable WHERE ...

查询有时(并非总是)与 SQLITE 数据库浏览器在“数据库结构”选项卡中显示为列顺序的顺序不同。因此,通过 getColumnIndex 引用列似乎是唯一安全的方法。

于 2013-04-11T13:24:09.157 回答