2012-04-23 17 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); 

4月23日17:58:26.701:E/AndroidRuntime(9212):SELECT *: android.database.sqlite.SQLiteException:そのようなカラム:Baked_Goods: 、コンパイル時に起因GL_table4 grlist_group = Baked_Goods ORDER FROM grlist_name COLLATE NOCASE

することにより、このラインは機能していますが、私はrawQueryでそれをやってみたい:

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

一重引用符で囲まれた「grlist_group」の値を囲む – ccheneson

+0

WHERE "+ KEY_GROUP_T +" = "" + grp + "'ORDER BY" + – ccheneson

答えて

3

このようにするには、文字列の前後に一重引用符を付ける必要があります。例:grpは、ユーザの入力から取られている場合

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

追加

Waqasは良い点を持って、彼はSQL insertion attackを妨げています。 grpを常に定義する場合は、重要ではありませんが、良い方法です。

+0

ありがとうございました – erdomester

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

0

単一引用符のアプローチは正しいですが、あなたは、クエリの速度を向上し、より読みやすくすることができます、そしてあなたができることができます

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