这是我用来创建表的查询
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
。
所以,如果我想要一个值,我必须通过索引Cursor.getString(index)
得到它。直到我调试我搞乱了调用错误的索引,但现在我想知道,为什么SQLite会保存这种方式?为什么它不遵循我创建id, name_site, url, login and pass
的方式?
感谢
答案 0 :(得分:4)
所以,如果我想要一个值,我必须通过索引得到它 Cursor.getString(指数)
因此,例如,您应该始终使用
c.getString(c.getColumnIndex("ColName")); // or better getColumnIndex(CONSTANT)
这种方法可以拯救我们所有人并确保您永远不会得到错误的结果。通常建议使用此方法,并且将COLUMN_NAMES
作为CONSTANTS
存储在单独的类中是非常非常有用和有效的练习。
注意:顺序取决于预测,即select name, lastname from table
答案 1 :(得分:1)
该数据按您在查询中请求的顺序排序,而不是您创建表格的顺序。因此,您可能更改了生成所述光标的查询中的顺序。
答案 2 :(得分:1)
光标中的列顺序取决于投影。为确保使用正确的列索引,请使用c.getString(c.getColumnIndexOrThrow("COLUMN_NAME"))
,其中c
是您的光标。
答案 3 :(得分:0)
我只是亲身体验过:
作为
的结果的光标列的索引SELECT * FROM mytable WHERE ...
查询有时(并非总是)与SQLITE数据库浏览器在“数据库结构”选项卡中显示为列顺序的顺序不同。因此,通过getColumnIndex引用列似乎是唯一安全的方法。