Вам необходимо предоставить байтовый массив как соответствующее значение для запроса, например. x'ff0099AA.
например. рассмотрим следующий SQL, который удаляет и создает таблицу, затем вставляет несколько строк с BLOBS, а затем ищет один из этих BLOB-объектов: -
DROP TABLE IF EXISTS table_with_blob;
CREATE TABLE IF NOT EXISTS table_with_blob (blob_column BLOB);
INSERT INTO table_with_blob VALUES(x'FFFFFFFF'),(x'EEEEEEEE'),(x'DDDDDDDD');
SELECT * FROM table_with_blob WHERE blob_column = x'EEEEEEEE';
Это приводит к тому, что единственная строка, как и ожидалось, будет найдена: -
Команды закомментированы, поэтому результат показан из-за того, как работает инструмент
С блобами не так хорошо работать, например, если вы хотите найти любые BLOB-объекты, эквивалентные LIKE x'EE% '(обратите внимание, что это не сработает и приведет к синтаксической ошибке ) вы бы сделали что-то вроде: -
SELECT *,rowid AS rid FROM table_with_blob WHERE substr(blob_column,1,1) = x'EE';
Обратите внимание, что начало и длина функции substr представляют количество байтов, а не количество символов / 4 бит / полубайтов шестнадцатеричной строки.
Однако самый простой способ, вместо написания метода преобразования байтового массива в шестнадцатеричную строку, состоит в том, чтобы метод удобства запроса выполнял преобразование в шестнадцатеричную строку от вашего имени.
Так что вместо: -
byte[] data = SerializationUtils.serialize(Object);
Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " +
DbContract.TABLE_NAME + " WHERE " + DbContract.SUBJECT_NUMBER + "=" + subjectNumber +
" AND " + DbContract.SUBJECT_TYPE_NUMBER + "=" + subjectTypeNumber + " AND " +
DbContract.CONTENT + "=" + data, null);
Вы можете иметь: -
byte[] data = SerializationUtils.serialize(Object);
String whereclause = DbContract.SUBJECT_NUMBER + "=? AND " +
DbContract.SUBJECT_TYPE_NUMBER + "=? AND " +
DbContract.CONTENT + "=?";
String[] whereargs = new String[]{subjectNumber,subjectTypeNumber,data}
Cursor = sqLiteDatabase.query(
DbContract.TABLE_NAME,
null, //<<<< all columns
whereclause,
whereargs,
null,null,null
);
- Обратите внимание, что приведенный выше код является принципиальным и не был проверен, поэтому может содержать некоторые ошибки.
- При извлечении данных для столбца содержимого необходимо использовать метод
getBlob
, например. mybytearray = getBlob(DbContract.CONTENT);