ГДЕ В пункте в Android sqlite? - PullRequest
9 голосов
/ 07 июня 2011

Я не могу получить предложение WHERE IN для работы с базой данных SQLite для Android.

Есть ли способ выполнить такое утверждение в Android?:

SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')

Ответы [ 7 ]

11 голосов
/ 28 марта 2015

Вы можете использовать TextUtils.join(",", parameters), чтобы воспользоваться преимуществами параметров привязки sqlite, где parameters - это список с "?" заполнителями, а строка результата выглядит примерно так: "?,?,..,?".

Вот немногопример:

Set<Integer> positionsSet = membersListCursorAdapter.getCurrentCheckedPosition();
List<String> ids = new ArrayList<>();
List<String> parameters = new ArrayList<>();
for (Integer position : positionsSet) {
    ids.add(String.valueOf(membersListCursorAdapter.getItemId(position)));
    parameters.add("?");
}
getActivity().getContentResolver().delete(
    SharedUserTable.CONTENT_URI,
    SharedUserTable._ID + " in (" + TextUtils.join(",", parameters) + ")",
    ids.toArray(new String[ids.size()])
);
9 голосов
/ 07 июня 2011

Вы должны будете использовать метод rawQuery:

Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')");
2 голосов
/ 07 июня 2011

Если вы используете контент-провайдера, вы можете использовать функцию запроса следующим образом:

getContentResolver().query(URI,new String[] {"body"}, "title IN ?", new String[] {"('title1','title2','title3')"}, null)

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

1 голос
/ 15 октября 2012

Пожалуйста, посмотрите на этот ответ .Это помогло мне в похожем случае.

String[] names = { "name1", "name2" }; // do whatever is needed first
String query = "SELECT * FROM table" + " WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);

Суть в том, чтобы предоставить переменные метки-заполнители (?), Соответствующие элементам предложения IN.И конечно - аргумент для них как массив строк.

1 голос
/ 06 июля 2012

Еще один способ сделать это

Cursor mCursor = SQLiteDatabase.query(true, "Name of table","String array of selection columns","title  in ('title1', 'title2', 'title3')", null, null, null, null, null);
if (mCursor != null) {
    mCursor.moveToFirst();
}
0 голосов
/ 24 марта 2018

Вам нужно написать rawquery таким образом -

 Cursor cursor = db.rawQuery("SELECT colunm1 FROM table WHERE colunm2 IN ('value1', 'value2', 'value3')", null);
0 голосов
/ 29 июля 2015

Добавление к христианскому ответу: хотя его ответ будет работать, вы должны попытаться использовать правильный способ запроса:

db.rawQuery("Select * from table1 where title = ?", new String[]{param1});

Этот подход также можно использовать с предложением WHERE IN, но переданная строка должна быть в формате 'asd', 'zxc', 'qwe'

Примерно так:

String param1 = "\'asd\',\'zxc\',\'qwe\'";
db.rawQuery("Select * from table1 where title in (?)", new String[]{param1});
...