7

我这样称呼 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 ?

如何in在 query() 中使用运算符?

我已经试过了

String[] args = new String[]{"('A','B')"}
4

4 回答 4

5
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);  
于 2013-04-30T08:44:09.817 回答
4

在从事一个项目并为同样的问题苦苦挣扎时,我发现这些其他问题(和答案)很有帮助:

  1. Sqlite 在一列中查询多个值
  2. Android/SQLite IN 子句和占位符

这是我发现的作品:

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()以某种方式扩展关联的参数,但我无法让它工作。

于 2013-05-02T23:25:28.673 回答
0

如果我没记错的话,arg 解析不适​​用于 IN 子句。所以你不能使用'?在您的 WHERE 子句中。

你应该这样做:

String args = "A, B";
Cursor cur = db.query("tab1", null, "name in (" + args + ")", null, null, null, null);

并在需要时使用循环构造您的 args。

于 2013-04-30T08:42:26.417 回答
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)});
于 2018-11-15T19:59:43.300 回答