Запрос Sqlite для нескольких значений в одном столбце - PullRequest
6 голосов
/ 01 декабря 2011

Я хотел сделать запрос в таблице для идентификатора поля с некоторыми значениями, такими как 1,5,4,11, которые появятся на предыдущем экране в соответствии с выбором.

cursor = database.query(tablename,
                    new String[] { "TopName" }, "id =?", new String[]{"2,3"}, null, null, null);

Когда мне это нравится, я получаю счетчик курсоров 0 с новой строкой [] {"2"} Я получаю желаемое значение для всех идентификаторов со значениями в строковом массиве, например, OR, которые имеют значение в этом столбце.

Ответы [ 6 ]

18 голосов
/ 01 декабря 2011

Вы можете использовать оператор IN следующим образом:

cursor = database.query(tablename, new String[] {"TopName"}, "id IN(?,?)", 
                                        new String[]{"2","3"}, null, null, null);
17 голосов
/ 06 марта 2013

Правильный синтаксис для использования оператора IN в Android ContentProvider следующий:

cursor = database.query(contentUri, projection, "columname IN(?,?)", new String[]{"value1" , "value2"}, sortOrder);

В качестве альтернативы, мы также можем использовать,

cursor = database.query(contentUri, projection, "columnName IN(?)", new String[] {" 'value1' , 'value2' "}, sortOrder);

Обратите внимание, что нам нужноодиночные кавычки вокруг каждого значения, разделенного запятыми, в аргументах для второго случая, в противном случае вся строка будет рассматриваться как одно значение для столбца.SQL будет обрабатывать его как

SELECT * FROM таблицы WHERE columnName IN ('value1, value2')

вместо правильного синтаксиса

ВЫБРАТЬ * ИЗ таблицы ГДЕ columnName IN ('значение1', 'значение2')

5 голосов
/ 01 декабря 2011

VolkerK был первым, кто правильно ответил на вопрос, но для полноты картины приведем полный пример использования оператора IN:

cursor = database.query(tablename,
                new String[] { "TopName" }, "id IN (?)", new String[]{"2,3"}, null, null, null);
3 голосов
/ 01 декабря 2011

Используйте оператор IN вместо сравнения на равенство (=).

1 голос
/ 01 декабря 2011

Для секции SelectionArgs я думаю, что вам нужно изменить:

new String[]{"2,3"}

На

new String[]{"2","3"}
0 голосов
/ 14 февраля 2017

Я хотел бы поместить это здесь, так как сборник ответов помог мне поместить несколько (неизвестных) значений в SQLiteDatabase.query(), и знак одного вопроса не работал для меня. Надежда помогает кому-либо

// API > 24
protected String attributesAsMarks(String[] attributes) {
    List<String> marks = Collections.nCopies(attributes.length, "?");

    return marks.stream().collect(Collectors.joining(","));
}

// I'm using API > 15
protected String attributesAsMarks(String[] attributes) {
    StringBuilder sb = new StringBuilder();
    String separator = "";

    for (String s : attributes) {
        if (s == null) continue;

        sb.append(separator).append("?");
        separator = ",";
    }

    return sb.toString();
}

Благодаря

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...