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

时间:2016-11-23 03:04:33

标签: android sqlite

我可以在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子句中执行按位操作?

1 个答案:

答案 0 :(得分:0)

这是Android API的一个陷阱。

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

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

谢谢,这可以节省我的一天。