14

我无法让 WHERE IN 子句在 android SQLite 数据库上工作。

有没有办法在android中执行这样的语句?:

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

7 回答 7

15

您可以使用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()])
);
于 2015-03-27T21:22:37.427 回答
10

您将不得不使用以下rawQuery方法:

Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')");
于 2011-06-06T22:49:36.010 回答
2

如果您使用的是内容提供者,则可以使用查询功能,如下所示:

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

请注意,我没有对此进行测试,但根据文档,这应该可以工作。

于 2011-06-06T22:53:24.453 回答
1

请看一下这个答案。它在类似的情况下帮助了我。

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 子句项。当然 - 将它们作为字符串数组的参数。

于 2012-10-15T07:48:11.077 回答
1

另一种方法

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();
}
于 2012-07-06T06:53:26.610 回答
1

您需要以这种方式编写 rawquery -

 Cursor cursor = db.rawQuery("SELECT colunm1 FROM table WHERE colunm2 IN ('value1', 'value2', 'value3')", null);
于 2018-03-24T04:23:36.803 回答
0

添加到克里斯蒂安的答案:虽然他的答案会起作用,但您应该尝试使用正确的查询方式:

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});
于 2015-07-28T21:37:32.957 回答