列索引顺序SQLite创建表

时间:2013-03-31 18:08:23

标签: android sqlite

这是我用来创建表的查询

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的方式?

感谢

4 个答案:

答案 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引用列似乎是唯一安全的方法。