我有内容解析器查询的以下代码:
String selection = Columns.NAME + "=? and " + Columns.AVAILABILITY + "=?";
String[] selectionArgs = { name, true };
Cursor c = getContentResolver().query(Columns.URI, null, selection, selectionArgs, null);
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,因为我只有一个名字,但现在我有一个名字数组,只有当它们的可用性为真时才会被添加到游标中.即,我的场景是我想将这些行放在游标中,只有当它们的可用性为真时才有任何名称(存在于数组中).
我怎样才能做到这一点?
SQL有这样的IN运算符:
String selection = Columns.NAME + " IN (?,?,?) AND" +
Columns.Availability + " = ?";
String[] selectionArgs = { name[0], name[1], name[2], true };
...
Run Code Online (Sandbox Code Playgroud)
如果数组大小未预先确定,则必须动态构造selection字符串和selectionArgs数组:
String selection = Columns.NAME + " IN (" + makePlaceholders(names.length) + ")" +
" AND " + Columns.Availability + " = ?";
String[] selectionArgs = new String[names.length + 1];
for (int i = 0; i < names.length; i++)
selectionArgs[i] = names[i];
selectionArgs[names.length] = true;
...
Run Code Online (Sandbox Code Playgroud)
使用makePlaceholders从此答案复制的功能:
String makePlaceholders(int len) {
StringBuilder sb = new StringBuilder(len * 2 - 1);
sb.append("?");
for (int i = 1; i < len; i++)
sb.append(",?");
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |