從Android SQLite數據庫的角度來看 - 我有一個表有一個BLOB類型的字段,然後我想根據這個BLOB字段來查詢這個表內容。SQLite查詢與字節[] WHERE子句
我可以用ContentValues
插入我的BLOB字段,並使用檢索:
cursor.getBlob(0)// index
我只是無法弄清楚如何查詢在此基礎上BLOB字段此表中的內容,並沒有發現任何有關此問題。
從Android SQLite數據庫的角度來看 - 我有一個表有一個BLOB類型的字段,然後我想根據這個BLOB字段來查詢這個表內容。SQLite查詢與字節[] WHERE子句
我可以用ContentValues
插入我的BLOB字段,並使用檢索:
cursor.getBlob(0)// index
我只是無法弄清楚如何查詢在此基礎上BLOB字段此表中的內容,並沒有發現任何有關此問題。
您無法查詢blob的(text?binary?other?)內容。
如果你看看,你會看到的內容是十六進制:
實例:X'53514C697465' 。
意見建議:
創建一個新的文本列,例如: 「blob_index」。您可以在「索引」列上搜索,然後獲取blob。
另外,只需將數據存儲爲「文本」即可。
我發現你可以在blob上查詢。需要在查詢中使用hex()函數。
例如我在我的數據庫行中使用UUID作爲一個唯一的密鑰,我可以在本地生成並仍然確保服務器上的唯一性。
CREATE TABLE example (_ID INTEGER PRIMARY KEY AUTOINCREMENT, uuid BLOB NON NULL UNIQUE, ...)
當插入數據以下工作:
final ContentValues values = new ContentValues(4); values.put(Contract.Line.COL_UUID, UuidFactory.toBlob(uuid));
鑑於形式的查詢URI:
content://package.example.com/example/uuid/11112222-3333-0444-0555-666677778888
查詢變爲:
final SQLiteDatabase db = mHelper.getReadableDatabase(); return db.query(table, projection, "hex(uuid) = ?", new String[] { UuidFactory.toHex(uri.getLastPathSegment()) }, null, null, null, null);
在UuidFactory
(其中還包含的代碼來生成新的UUID)的遵循靜態函數如此定義:
@NonNull public static String toHex(@NonNull final UUID uuid) { return String.format("%016X%016X", uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()); } @NonNull public static String toHex(@NonNull final String uuid) { return toHex(UUID.fromString(uuid)); } @NonNull public static byte[] toBlob(@NonNull final UUID uuid) { final ByteBuffer buf = ByteBuffer.allocate(16); buf.putLong(uuid.getMostSignificantBits()); buf.putLong(uuid.getLeastSignificantBits()); return buf.array(); }
並且爲了完整性:
@NonNull public static UUID fromBlob(@NonNull final byte[] array) { final ByteBuffer buf = ByteBuffer.allocate(16); buf.mark(); buf.put(array); buf.reset(); final long msb = buf.getLong(); final long lsb = buf.getLong(); return new UUID(msb, lsb); }