我遇到过这个问题:
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)。这对我来说听起来不是一个很好的解决方案。
谢谢你的时间!
答案 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"};