2012-04-23 89 views
0

如何使該行生效?Android sqlite where子句

return ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + KEY_GROUP_T + " = " + grp + " ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", null); 

04-23 17:58:26.701:E/AndroidRuntime(9212): android.database.sqlite.SQLiteException:沒有這樣的柱:Baked_Goods:致 ,在編譯時:SELECT *從GL_table4 WHERE grlist_group = Baked_Goods ORDER BY grlist_name COLLATE NOCASE

這一行工作,但我想rawQuery做到這一點:

return ourDatabase.query("GL_" + tablename, columns, KEY_GROUP_T + "= ?" , new String[]{grp}, null, null, null); 
+0

圍繞'grlist_group'的值用單引號 – ccheneson 2012-04-23 18:05:59

+0

WHERE「+ KEY_GROUP_T +」='「+ grp +」'ORDER BY「+ – ccheneson 2012-04-23 18:06:27

回答

3

爲了完成這項工作,您必須在字符串周圍放置單引號。例如:

return ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + KEY_GROUP_T + " = '" + grp + "' ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", null); 

加成

Waqas好點,如果grp從用戶的輸入拍攝,他是防止SQL insertion attack。如果你總是定義grp,那麼這不是關鍵,而是良好的做法。

+0

謝謝,它的工作 – erdomester 2012-04-23 18:19:30

3

更改此:

return ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + 
KEY_GROUP_T + " = " + grp + " ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", null); 

要這樣:

return ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + 
KEY_GROUP_T + " = ? ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", new String[]{grp}); 
+0

這也行得通,謝謝! – erdomester 2012-04-23 18:19:40

0

雖然單引號的做法是正確的,你可以提高查詢的速度,並允許更好的可讀性,你可以如果你這樣做,請不要忘記單引號:

String [] selectionArgs = {String.valueOf(grp)}; 
ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + KEY_GROUP_T + " = ?" + " ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", selectionArgs);