我想在表格中查询字段ID,其中包含一些类似1,5,4,11的视图,这些视频将根据选择来自前一个屏幕。
cursor = database.query(tablename,
new String[] { "TopName" }, "id =?", new String[]{"2,3"}, null, null, null);
当我这样做的时候,我得到游标数为0,新的String [] {“2”}我得到的值我想要的所有id都是字符串数组中的值,如OR在该列中有值。< / p>
答案 0 :(得分:18)
您可以像这样使用IN运算符
cursor = database.query(tablename, new String[] {"TopName"}, "id IN(?,?)",
new String[]{"2","3"}, null, null, null);
答案 1 :(得分:17)
在Android的ContentProvider中使用IN运算符的正确语法如下:
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 table WHERE columnName IN('value1,value2')
而不是正确的语法
SELECT * FROM table WHERE columnName IN('value1','value2')
答案 2 :(得分:5)
VolkerK是第一个正确回答这个问题的人,但为了完整起见,这里有一个如何使用IN运算符的完整示例:
cursor = database.query(tablename,
new String[] { "TopName" }, "id IN (?)", new String[]{"2,3"}, null, null, null);
答案 3 :(得分:3)
使用IN operator代替相等比较(=)。
答案 4 :(得分:1)
对于SelectionArgs部分,我认为你需要改变:
new String[]{"2,3"}
到
new String[]{"2","3"}
答案 5 :(得分:0)
我想把这个放在这里,因为答案汇编帮助我在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();
}
感谢