7

I wanted to do query in table for field id with some vales like 1,5,4,11 which will come from previous screen according to selection.

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

When I do like this, I am getting cursor count 0, with new String[]{"2"} I am getting value I want for all ids with values in string array like OR which have value in that column.

6 Answers 6

20

You can use the IN operator like this,

cursor = database.query(tablename, new String[] {"TopName"}, "id IN(?,?)", 
                                        new String[]{"2","3"}, null, null, null);
Sign up to request clarification or add additional context in comments.

1 Comment

what if we want to match with one more column with the same scene?
17

The correct syntax for using the IN operator in Android's ContentProvider is as follows:

cursor = database.query(contentUri, projection, "columname IN(?,?)", new String[]{"value1" , "value2"}, sortOrder);

Alternatively, we can also use,

cursor = database.query(contentUri, projection, "columnName IN(?)", new String[] {" 'value1' , 'value2' "}, sortOrder);

Note that we need single quotes around each comma-separated value in the arguments for second case, otherwise the whole string will be treated as one value for the column. The SQL will treat it as

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

instead of the correct syntax

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

Comments

5

VolkerK was first to correctly answer the question, but for the sake of completeness here is a full example of how to use the IN operator:

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

Comments

3

Use the IN operator instead of equality comparison (=).

Comments

1

For the SelectionArgs section I think you need to change:

new String[]{"2,3"}

To

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

2 Comments

That's not what the OP is looking for, and it would actually cause an error since the number of supplied arguments is different from the number of ? fields. VolkerK's answer is correct.
Oh ok...I see it now. I have the same question as ud_an then. How do you use the "IN" operator in the query above?
0

I would like to put this here since a compendium of answers helped me putting multiple (unknown) values in SQLiteDatabase.query() and the one-question-mark did not work for me. Hope helps anyone

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

Thanks to

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.