0

この行を機能させるにはどうすればよいですか?

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 * FROM 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);
4

3 に答える 3

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});
于 2012-04-23T18:14:56.370 に答える
3

これを機能させるには、文字列を一重引用符で囲む必要があります。例:

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

添加

grpユーザーの入力から取得した場合、Waqas は良い点を持っています。彼はSQL 挿入攻撃を防いでいます。常に定義する場合grp、それは重要ではありませんが、良い習慣です。

于 2012-04-23T18:06:09.563 に答える
0

一重引用符のアプローチは正しいですが、クエリの速度を上げて読みやすくすることができます。代わりにこれを行うと、一重引用符を忘れることはできません。

String [] selectionArgs = {String.valueOf(grp)};
ourDatabase.rawQuery("SELECT * FROM GL_" + tablename + " WHERE " + KEY_GROUP_T + " = ?" + " ORDER BY " + KEY_NAME_T + " COLLATE NOCASE", selectionArgs);
于 2012-04-23T18:19:38.180 に答える