Запрос IN запроса поставщика контента для Android

Можно ли использовать предложение IN для поставщика контента?

В настоящее время я использую

cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (?)", new String[] { argsBuilder.toString() }, null);

Если я удалю (?) и просто использую ?, я получаю сообщение об ошибке.

Я получаю 0 count в моем курсоре.

Если я набираю вручную и выполняю запрос в sqlite3, он работает.

Справка

Ответ 1

При использовании оператора IN вам нужно иметь один ?, разделенный запятой на каждый аргумент, который вы указываете в массиве selectionArgs. Например:.

String[] selectionArgs = {"red", "black"};
String selection = "color IN (?, ?)";

Следующий выбор правильного счета и правильного args:

int argcount = 2; // number of IN arguments
String[] args = new String[]{ 1, 2 };
StringBuilder inList = new StringBuilder(argcount * 2);
for (int i = 0; i < argcount; i++) { 
    if(i > 0) {
        inList.append(",");
    }
    inList.append("?"); 
}
cursor = contentResolver.query(
   CONTENT_URI, 
   PROJECTION, 
   "field IN (" + inList.toString() + ")", 
   args, 
   null);

Ответ 2

Если ваши аргументы являются номерами, это также работает:

Iterable args = ...; // any array, list, set, ... 
cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (" + TextUtils.join(",", args) + ")", null, null);