按BLOB列的内容查询ContentProvider

时间:2014-10-19 21:48:11

标签: android android-sqlite android-contentprovider

我需要根据二进制blob列的值查询ContentProvider:

mContext.getContentResolver().query(
               contentUri,                          // Uri
               null,                                // Projection
               TableColumns.blobColumn + " = ?",    // Selection
               new String[] { blob_query },         // Selection Arguments
               null);                               // Order

根据我对SQLite literal values的阅读,似乎可以使用字符串文字[0x01]查询值为X'01'的blob。

但是,我无法查询blobColumn具有值new byte[] { (byte) 0x01 }的记录

测试代码

 // Insert record
 byte[] blobData = new byte[] { (byte) 0x01 };

 ContentValues entry = new ContentValues();
 entry.put(TableColumns.blobColumn, blobData);
 Uri entryUri = getContext().getContentResolver().insert(contentUri, entry);

 // Query record by blob (fails)
 result = getContext().getContentResolver().query(contentUri,
            null,
            TableColumns.blobColumn + " = ?",
            new String[] {
              "x'01'"
            // None of the above or below work
            // "0x01"
            //"X'01'"
            //"01"
            },
            null);
 result.getCount() // 0

 // Query record by id (succeeds)
 result = getContext().getContentResolver().query(contentUri,
            null,
            TableColumns.idColumn + " = ?",
            new String[] {
              entryUri.getLastPathSegment()
            },
            null);
 result.getCount() // 1

1 个答案:

答案 0 :(得分:0)

以下作品:

    Cursor result = getContext().getContentResolver().query(contentUri,
            null,
            "quote(" + TableColumns.blobColumn + ") = ?",
            new String[] { "X'01'" },
            null);

如果它存在,我会高兴地接受更好的答案。