一个带有多个参数的参数 - Selection和SelectionArgs

时间:2015-06-04 06:15:47

标签: java sqlite cursor

我遇到过这个问题:

Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 3 because the index is out of range. The statement has 1 parameters.

由于:

String where = "id_1 = 50 AND id_2 = ?";
//The String[] is ideally of dynamic length and not necessarily 3 in size.
String[] whereArgs = {"60", "61", "62"};

cursor.setSelection(where);
cursor.setSelectionArgs(whereArgs);

我只是以错误的方式使用它。我已经意识到这一点。但我认为这显示了我想要实现的目标。

我的问题: 有没有办法让我将一个不同长度和参数的数组插入一个参数?我错过的任何最佳实践。我只是把自己弄成了糟糕的情况吗?

我可能正在寻找的SQL语句:

WHERE id_1 = 50 AND ((id_2 = 60) OR (id_2 = 61) OR (id_2 = 62))

我能想到解决问题的唯一方法是创建一个字符串并在循环中构建它,String []的长度在每次迭代时添加OR(id_2 = xx)。这对我来说听起来不是一个很好的解决方案。

谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

通常,动态构造WHERE子句是正确的解决方案。使用StringBuilder.append()而不是+来节省一些字符串构造开销。

在某些情况下,您可能还需要发出多个语句。而不是

select from table where id_1 = 50 AND (id_2 = ? OR id_2 = ? OR id_2 = ?);

您可以执行here

select from table where id_1 = 50 AND (id_2 = ?);
select from table where id_1 = 50 AND (id_2 = ?);
select from table where id_1 = 50 AND (id_2 = ?);

答案 1 :(得分:0)

尝试使用此代码:

String where = "id_1 = 50 AND (id_2 = ? OR id_2 = ? OR id_2 = ?)";

String[] whereArgs = {"60", "61", "62"};