Android内容提供商sqlite按位操作选择

Android内容提供商sqlite按位操作选择,android,sqlite,Android,Sqlite,我可以在Android内容提供商的sqlite选择中执行位操作吗 我创建了一个游标加载器来从数据库加载数据,但没有返回结果。返回光标的计数为零 new CursorLoader(getActivity(), Person.PERSON_CONTENT_URI, Person.FULL_PROJECTION, "( " + Person.FLAG + " & 2 ) = ?", new String[]{

我可以在Android内容提供商的sqlite选择中执行位操作吗

我创建了一个游标加载器来从数据库加载数据,但没有返回结果。返回光标的计数为零

new CursorLoader(getActivity(), Person.PERSON_CONTENT_URI,
            Person.FULL_PROJECTION,
            "( " + Person.FLAG + " & 2 ) = ?",
            new String[]{
                    String.valueOf(2)
            },
            Person.USER_NAME + " asc");
sqlite
不支持按位选择操作。下面是一个在PC命令行中测试的示例

$ sqlite3 test.db
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> create table person(name text, flag integer);
sqlite> insert into person values('a', 1), ('b', 2), ('c', 4), ('d', 8);
sqlite> select * from person where (flag & 4) == 4;
c|4
为什么Android中的实现不支持它


如何在Android中的sqlite selection子句中执行按位操作?

这是Android API中的一个陷阱

正如@Mike的评论,整数选择参数必须在
中引用,其中
字符串不能作为文本参数传递

new CursorLoader(getActivity(), Person.PERSON_CONTENT_URI,
        Person.FULL_PROJECTION,
        "( " + Person.FLAG + " & 2 ) = 2",
        null,
        Person.USER_NAME + " asc");

谢谢,这拯救了我的一天。

这是Android API中的一个陷阱

正如@Mike的评论,整数选择参数必须在
中引用,其中
字符串不能作为文本参数传递

new CursorLoader(getActivity(), Person.PERSON_CONTENT_URI,
        Person.FULL_PROJECTION,
        "( " + Person.FLAG + " & 2 ) = 2",
        null,
        Person.USER_NAME + " asc");

谢谢,这节省了我的时间。

您将等号的右操作数视为文本。为选择参数传递
null
,并将选择中的
替换为
2
,您将等号的右侧操作数视为文本。为选择参数传递
null
,并将选择中的
替换为
2