Я нашел, что вы можете запросить на блобе. Нужно использовать функцию 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);
}