2013-03-31 76 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引用列似乎是唯一安全的方法。