2016-11-23 8 views
1

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の選択句でビット単位の操作を実行するにはどうすればよいですか?

+1

あなたは、テキストの右辺のオペランドを扱っています。選択argsに 'null'を渡し、選択中の'? 'を' 2'に置き換えます –

答えて

0

Android APIの落とし穴です。

@ Mikeのコメントでは、整数選択引数は、where文字列で引用する必要があります。テキスト引数として渡すことはできません。

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

ありがとうございます、これは私の一日を保存します。

関連する問題