2013-03-31 77 views
4

这是我用它来创建一个表列索引顺序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

所以,如果我想有一个值。我得到指数 Cursor.getString得到它(指数)

因此,例如,基于这个原因,你应该总是使用

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

这种方法可以节省我们所有人,并确保您永远不会得到错误的结果。通常这种方法是推荐的,并且将COLUMN_NAMES作为CONSTANTS存储在分离的类中是非常非常有用和高效的实践。

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

+0

感谢那个答案解决了我,在回应注意,情况并非如此,我猜,因为当查询方法,我没有指定列的顺序。方法:database.query(TABLE_NAME,WHERE ID,..rest为空); – Rigotti

+0

@Rigotti欢迎您:)我只提到它也取决于投影,如果您使用原始语句。 – Sajmon

1

这些数据是由您的请求在您的查询的顺序排列,而不是为了你创建的表。所以你可能改变了生成所说游标的查询顺序。

1

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

0

我刚才的亲身体验:

光标列的索引作为

SELECT *从结果mytable WHERE ...

查询有时(并非总是)与SQLITE数据库浏览器在数据库结构中显示为列顺序的顺序不同e标签。所以通过getColumnIndex引用列似乎是唯一安全的方法。