2014-01-05 49 views
2

我使用SQLite-asset-helper通過jgilfeltAndroid的SQLite的「0 _id」中的select語句

我試圖尋找到他的樣本項目和整個這個代碼就來了:

public Cursor getEmployees() { 

    SQLiteDatabase db = getReadableDatabase(); 
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 

    String [] sqlSelect = {"0 _id", "FirstName", "LastName"}; 
    String sqlTables = "Employees"; 

    qb.setTables(sqlTables); 
    Cursor c = qb.query(db, sqlSelect, null, null, 
      null, null, null); 

    c.moveToFirst(); 
    return c; 

} 

什麼意思該_ID字段的select語句中的「0」?

回答

2

它返回的值爲0,列名爲_id(它使用列名稱別名)。

您可以通過這種方式返回表中不存在的列。

+0

是的,我注意到了沒有列_id在表中。因此,如果我打印_id的值,它會一直返回0,對嗎? –

+1

是的,沒錯。 – Szymon

+2

至於** _ id **,我會使用** rowid _id **,所以它會返回REAL行ID(這是每個SQLite表中的HIDDEN列),而不是0. –

1

某些Android適配器要求您始終選擇一個_id字段,即使您的表沒有選定該字段。試試吧,你的應用會崩潰而不選擇_id。因此,他們正在通過選擇其中包含0的模擬_id值來爲此做一個解決方法。

編輯:一個更好的方式來做到這將是一個例子,如果你想使用的,而不是在你的表「_id」,「ID」,只是做了SELECT id as _id FROM ...

+0

這是不正確的。我剛剛嘗試過,至少在4.4版本中可以返回帶有任何名稱的單個列,例如'{「2 aaa」}'。 – Szymon

+1

這取決於您使用的適配器。更多信息:http://stackoverflow.com/questions/3192064/about-id-field-in-android-sqlite – VM4

+0

有問題的代碼在頂部有一個鏈接,該代碼使用SimpleCursorAdapter中的Cursor。 – VM4