我想在表中查询字段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那样在该列中有值 .
您可以像这样使用IN运算符,
cursor = database.query(tablename, new String[] {"TopName"}, "id IN(?,?)", new String[]{"2","3"}, null, null, null);
在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')
VolkerK是第一个正确回答这个问题的人,但为了完整起见,这里有一个如何使用IN运算符的完整示例:
cursor = database.query(tablename, new String[] { "TopName" }, "id IN (?)", new String[]{"2,3"}, null, null, null);
使用IN operator而不是相等比较(=) .
对于SelectionArgs部分,我认为你需要改变:
new String[]{"2,3"}
至
new String[]{"2","3"}
我想把这个放在这里,因为答案汇编帮助我在 SQLiteDatabase.query() 中放置了多个(未知)值,而且一个问题标记对我不起作用 . 希望帮助任何人
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(); }
谢谢
@Lalit
https://stackoverflow.com/a/5600690/1358777
https://stackoverflow.com/a/38546936/1358777
https://stackoverflow.com/a/524089/1358777
6 回答
您可以像这样使用IN运算符,
在Android的ContentProvider中使用IN运算符的正确语法如下:
或者,我们也可以使用,
Note that we need single quotes 围绕第二种情况的参数中的每个逗号分隔值,否则整个字符串将被视为该列的一个值 . SQL会将其视为
而不是正确的语法
VolkerK是第一个正确回答这个问题的人,但为了完整起见,这里有一个如何使用IN运算符的完整示例:
使用IN operator而不是相等比较(=) .
对于SelectionArgs部分,我认为你需要改变:
至
我想把这个放在这里,因为答案汇编帮助我在
SQLiteDatabase.query()
中放置了多个(未知)值,而且一个问题标记对我不起作用 . 希望帮助任何人谢谢
@Lalit
https://stackoverflow.com/a/5600690/1358777
https://stackoverflow.com/a/38546936/1358777
https://stackoverflow.com/a/524089/1358777