2013-01-07 85 views
1

我試圖運行使用rawquery運行與主鍵的別名的查詢,使之_id,這樣我就可以使用SimpleCursorAdapter,這是我有:的Android源碼rawquery選擇ARGS問題

String sel = DatabaseListDB.COLUMN_DATABASE_NAME; 
Cursor results = db.rawQuery("SELECT ? as _id FROM DatabaseList", 
    new String[] {sel}); 

在我SqlLiteHelperClass

public static final String COLUMN_DATABASE_NAME = "databaseName"; 

是列名我想和我的主鍵。問題是當我運行這個查詢時,結果與'databaseName'一起作爲表中的值而不是實際的值。 我可以運行查詢作爲

Cursor results = db.rawQuery("SELECT databaseName as _id FROM DatabaseList", 
    null); 

並能正常工作,我不知道爲什麼我不能正常使用selectionArgs兩個。誰能幫我解決這個問題嗎?

+0

你需要看[這裏](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery% 28java.lang.String,%20java.lang.String []%29)在SQL查詢 –

+0

中,selectargs究竟意味着什麼條件,如果使用任何類型的遊標適配器,則希望有一個名爲_id的_id列。 – njzk2

回答

1

developer.android.com,你只能把「?」在where子句中,不列要查詢:

  • selectionArgs兩個:你可能包括s-在查詢中,將由來自selectionArgs兩個值來代替條款嗎。這些值將被綁定爲字符串。
2

?應該用於WHERE參數。在你的情況,你應該簡單地修改您的查詢爲:

Cursor results = db.rawQuery(String.format("SELECT %s as _id FROM DatabaseList", sel)); 
+0

哦,我明白了,謝謝,爲什麼呢?將它們用於查詢的哪一部分而不是以與查詢的其餘部分相同的方式使用它們的意義何在? – graeme

+0

爲了支持'?',我知道的一個原因是爲了避免[惡意SQL注入](http://www.imperva.com/resources/glossary/sql_injection.html),並自動處理原語的輸入。 – waqaslam