首页 文章

Sqlite查询一列中的多个值

提问于
浏览
6

我想在表中查询字段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那样在该列中有值 .

6 回答

  • 0

    您可以像这样使用IN运算符,

    cursor = database.query(tablename, new String[] {"TopName"}, "id IN(?,?)", 
                                            new String[]{"2","3"}, null, null, null);
    
  • 5

    在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);
    

    Note that we need single quotes 围绕第二种情况的参数中的每个逗号分隔值,否则整个字符串将被视为该列的一个值 . SQL会将其视为

    SELECT * FROM表WHERE columnName IN('value1,value2')

    而不是正确的语法

    SELECT * FROM表WHERE columnName IN('value1','value2')

  • 3

    VolkerK是第一个正确回答这个问题的人,但为了完整起见,这里有一个如何使用IN运算符的完整示例:

    cursor = database.query(tablename,
                    new String[] { "TopName" }, "id IN (?)", new String[]{"2,3"}, null, null, null);
    
  • 18

    使用IN operator而不是相等比较(=) .

  • 1

    对于SelectionArgs部分,我认为你需要改变:

    new String[]{"2,3"}
    

    new String[]{"2","3"}
    
  • 16

    我想把这个放在这里,因为答案汇编帮助我在 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();
    }
    

    谢谢

相关问题