Sqlite查询一列中的多个值

时间:2011-12-01 15:35:08

标签: android sqlite

我想在表格中查询字段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>

6 个答案:

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

感谢