我正在调用SQLite
String[] args = new String[]{"(A,B)"}
Cursor cur = db.query("tab1", null, "name in ?", args, null, null, null);
并收到例外:
android.database.sqlite.SQLiteException: near "?": syntax error: , while compiling: SELECT * FROM tab1 WHERE name in ?
如何在query()中使用in
运算符?
我已经尝试了
String[] args = new String[]{"('A','B')"}
答案 0 :(得分:4)
String[] args = new String[]{A,B} // if A, B are variables
String[] args = new String[]{"A","B"}
Cursor cur = db.query("tab1", null, "name in (?,?)", args, null, null, null);
答案 1 :(得分:4)
在开展项目并努力解决同样的问题时,我发现其他问题(和答案)很有帮助:
以下是我发现的作品:
String[] args = new String[] {"A", "B"};
Cursor cur = db.query("tab1", null, "name in(?,?)", args, null, null, null);
将会:
String args = "A, B";
Cursor cur = db.query("tab1", null, "name in(" + args + ")", null, null, null, null);
因此,您可以将多个?
与IN()
语句一起使用,并将每个与selectionArgs
数组中的元素匹配(如第一个示例)。如果您的WHERE
子句中有多个条件,请务必将?
与selectionArgs
中的正确元素相匹配:
String[] args = new String[] {"Current", "A", "B"};
Cursor cur = db.query("tab1", null, "IsCurrent=? AND name in(?,?)", args, null, null, null);
或者您可以直接在IN()
字符串本身的selection
语句中使用由逗号描述的参数组成的字符串(如第二个示例所示)。
引用的问题似乎表明您可以在?
中使用单个IN()
并以某种方式扩展相关参数,但我无法使其工作。
答案 2 :(得分:0)
如果我没有弄错,arg解析不适用于IN子句。所以你不能使用'?'在你的WHERE子句中。
你应该这样做:
String args = "A, B";
Cursor cur = db.query("tab1", null, "name in (" + args + ")", null, null, null, null);
并根据需要用循环构建你的args。
答案 3 :(得分:0)
如果我理解正确,则可以这样解决您的问题:
List<String> exercise = new ArrayList<>();
exercise.add(parameter1);
exercise.add(parameter2);
exercise.add(parameter3);
Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM exersisesenglish WHERE sex " + "
=?" + " AND level" + "=?" + " AND wish" + "=?" + " AND place" + "=?" + " AND lang" +
"=?" +" AND stay_exersise IN (" + exercise.get(0) + "," + exercise.get(1) + "," +
exercise.get(2) + "," + exercise.get(3) + ")", new String[]{String.valueOf(sex),
String.valueOf(level), String.valueOf(wish), String.valueOf(place),
String.valueOf(loc)});