У меня была такая же проблема, как и у вас. Мне удалось найти решение для запроса с blob в предложении where, но не для удаления. Таким образом, в конце я решил сначала запросить строки, которые я хочу удалить, а затем использовать идентификатор строки, чтобы удалить его. Вот пример кода. Я предполагаю, что у вас есть столбец с именем ImageId в качестве первичного ключа типа int.
public Cursor queryImage(final byte[] data, String[] columns) {
return getReadableDatabase().queryWithFactory(
new CursorFactory() {
@Override
public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) {
query.bindBlob(1, data);
return new SQLiteCursor(db, masterQuery, editTable, query);
}
},
false,
"FavoriteData",
columns,
"Image = ?", null, null, null, null, null);
}
public void favoriteDelete(byte[] byteArray){
Cursor cursor = queryImage(byteArray, new String[]{"ImageId"});
while (cursor.moveToNext()) {
getReadableDatabase().delete("FavoriteData",
"ImageId" + "= ?",
new String[] { String.valueOf(cursor.getInt(0))});
}
}
Если у кого-то есть лучшее решение, мне тоже будет интересно. В любом случае, если у вас есть какой-либо способ избежать использования Blob для запроса, он будет лучше, потому что он не так эффективен. Вы можете попытаться как-то идентифицировать изображения, например, используя для поиска хэш данных изображения.