Android:SQLite - 查询 SelectionArgs 中的数组以及其他字符串值

2023-12-07

我有以下内容解析器查询代码:

String selection = Columns.NAME + "=? and " + Columns.AVAILABILITY + "=?";
String[] selectionArgs = { name, true };
Cursor c = getContentResolver().query(Columns.URI, null, selection, selectionArgs, null);

这段代码工作正常,因为我只有一个名称,但现在我有一组名称,仅当它们的可用性为真时才将其添加到游标中。即,我的情况是我想将那些具有任何名称(存在于数组中)的行放入游标中,前提是它们的可用性为真。

我怎样才能实现这个目标?


SQL 有IN 运算符为了这:

String selection = Columns.NAME + " IN (?,?,?) AND" +
                   Columns.Availability + " = ?";
String[] selectionArgs = { name[0], name[1], name[2], true };
...

如果数组大小没有预先确定,则必须构造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;
...

与功能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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:SQLite - 查询 SelectionArgs 中的数组以及其他字符串值 的相关文章

随机推荐