Я не могу заставить предложение WHERE IN работать с базой данных Android SQLite.
Есть ли способ выполнить такой оператор в Android? :
SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
Я не могу заставить предложение WHERE IN работать с базой данных Android SQLite.
Есть ли способ выполнить такой оператор в Android? :
SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
Вы можете использовать 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()])
);
Вам придется использовать метод rawQuery
:
Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')");
Если вы используете поставщика контента, вы можете использовать функцию запроса как таковую:
getContentResolver().query(URI,new String[] {"body"}, "title IN ?", new String[] {"('title1','title2','title3')"}, null)
Обратите внимание, что я не проверял это, но, согласно документации, это должно работать.
SELECT body FROM table1 WHERE title IN '('title1', 'title2', 'title3')'
. Обратите внимание на '
вокруг всей аргументной части.
- person Antimonit; 15.09.2015
Пожалуйста, взгляните на этот ответ. Мне помогло в похожем случае.
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. И конечно же аргумент для них в виде массива String.
Другой способ сделать это
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();
}
Вам нужно написать rawquery таким образом -
Cursor cursor = db.rawQuery("SELECT colunm1 FROM table WHERE colunm2 IN ('value1', 'value2', 'value3')", null);
Добавление к ответу Кристиана: хотя его ответ будет работать, вы должны попытаться использовать правильный способ запроса:
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});