Android的sqlite中的where子句?

我无法得到WHERE IN子句在Android SQLite数据库上工作。

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

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

Solutions Collecting From Web of "Android的sqlite中的where子句?"

你将不得不使用rawQuery方法:

 Cursor c = db.rawQuery("SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')"); 

您可以使用TextUtils.join(",", parameters)来利用sqlite绑定参数,其中parameters是一个列表"?" 占位符和结果string就像"?,?,..,?"

这是一个小例子:

 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()]) ); 

如果您正在使用内容提供商,则可以使用查询function:

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

请注意,我没有testing过,但根据文档,这应该工作。

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

 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(); } 

添加Cristian答案:当他的答案将起作用时,您应该尝试使用正确的查询方式:

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

这个方法也可以和WHERE IN子句一起使用,但是传入的string必须是'asd','zxc','qwe'

喜欢这个:

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