SQLite在query()中的运算符

时间:2013-04-30 08:30:40

标签: android sqlite

我正在调用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')"}

4 个答案:

答案 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)

在开展项目并努力解决同样的问题时,我发现其他问题(和答案)很有帮助:

  1. Sqlite Query for multiple values in one columm
  2. Android/SQLite IN clause and placeholders
  3. 以下是我发现的作品:

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