Android sqlite where子句

时间:2012-04-23 18:03:23

标签: android sqlite

如何使这条线工作?

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);

3 个答案:

答案 0 :(得分:3)

要使其工作,您必须在字符串周围放置单引号。例如:

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

<强>加成

如果从用户的输入中获取grp,Waqas有一个好点,他正在阻止SQL insertion attack。如果你总是定义grp,那么这不是关键但是很好的做法。

答案 1 :(得分: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});

答案 2 :(得分:0)

虽然单引号方法是正确的,但您可以提高查询速度,并提供更好的可读性,如果您这样做,也不能忘记单引号:

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