Как контролировать, где id равен неизвестному номеру переменной sql запроса? - PullRequest
1 голос
/ 09 марта 2020

Я ищу что-то подобное:

String ID = ContactsContract.Contacts._ID;
ContentResolver cR = context.getContentResolver();
Cursor cursor = cR.query(mUri, null, ID + " =?", mStringArray, null);

mStringArray неочевиден, и пользователь будет назначать его элементы. Поэтому мы не знаем, какова длина массива и какие элементы имеет mStringArray. Я хочу запросить для каждого значения mStringArray. В этом случае я получаю сообщение об ошибке «IllegalArgumentException: невозможно связать аргумент с индексом 2 (или 3,4, ...), потому что индекс находится вне диапазона. У оператора есть 1 параметр».

Надеюсь, я ясен.

1 Ответ

1 голос
/ 09 марта 2020

Вместо = вы должны использовать оператор IN и создать оператор с таким количеством ? заполнителей, сколько элементов массива mStringArray:

String ID = ContactsContract.Contacts._ID;
ContentResolver cR = context.getContentResolver();

StringBuilder sb = new StringBuilder();
for (String s : mStringArray ) {
    sb.append("?,");
}
String sqlIn = null;
if (sb.length() > 0) {
    sb.deleteCharAt(sb.length() - 1);
    sqlIn = ID + " IN (" + sb.toString() + ")";
}
Cursor cursor = cR.query(mUri, null, sqlIn, mStringArray, null);
...