Swift: вставьте UIImage как большой двоичный объект в базу данных SQLite

Я использую SQLite.swift и хочу вставить UIImage в столбец типа «BLOB».

Моя таблица:

"CREATE TABLE IF NOT EXISTS " + TABLE_USER +
                    "(" +
                    COLUMN_ID + " INTEGER PRIMARY KEY, " +
                    COLUMN_NAME + " TEXT NOT NULL, " +
                    COLUMN_IMAGE + " BLOB" +
                    ");";

После выбора изображения из галереи с помощью UIImagePickerController я хочу сохранить его в столбце «изображение» в базе данных. Я предполагаю, что мне нужно преобразовать UIImage в массив байтов (так я сделал это в java в другом проекте), но я не знаю, как это работает в Swift. Вот что я пробовал:

// convert image
let data = image!.pngData()! as NSData
let dataBytes = data.bytes

// prepare update statement 
let updateStatement = "UPDATE " + DatabaseHelper.TABLE_USER + " SET " +
DatabaseHelper.COLUMN_IMAGE + " = ? " +
" WHERE " + DatabaseHelper.COLUMN_ID + " = " + String(id)

// run statement
do {
   let statement = try dbConnection.prepare(updateStatement)
   try statement.run(dataBytes) // Error: Cannot convert value of type 'UnsafeRawPointer' to expected argument type 'Binding?'
} catch {
   print("Error...")
}

Кто-нибудь знает, как вставить изображение в столбец blob? Большое спасибо за твою помощь!


person Raspberry    schedule 17.01.2020    source источник
comment
Не лучше ли сохранить изображение на диск и сохранить URL-адрес файла изображения в базе данных?   -  person Joakim Danielson    schedule 17.01.2020
comment
Откуда let data = image!.pngData()! as NSData?   -  person El Tomato    schedule 17.01.2020
comment
Вам нужно другое поле, когда вы имеете дело с данными BLOB-объектов.   -  person El Tomato    schedule 17.01.2020
comment
Спасибо за ваши комментарии. @ Йоаким: есть разные причины, по которым мне нужно хранить это в базе данных. Я уже сделал то же самое в приложении для Android, и это не проблема. Нет ли возможности сделать это быстро? @ ElTomato: это было просто то, что я прочитал в вопросе о переполнении стека, и именно так я пытался преобразовать свой UIImage в массив байтов ... Что вы имеете в виду под другим полем?   -  person Raspberry    schedule 17.01.2020
comment
Я провел много исследований и не думаю, что это дубликат. Не рекомендуется хранить изображение в виде строки (как описано в принятом ответе), многие ответы на переполнение стека рекомендуют хранить его в столбце больших двоичных объектов, но я не знаю, как это сделать в быстром режиме. Нишад Аврора пишет в последнем комментарии принятого ответа, что он решил свою проблему с помощью блоба. Но он не говорит, как ему это удалось.   -  person Raspberry    schedule 18.01.2020
comment
Я полностью согласен с тем, что ваш вопрос не является дубликатом связанного вопроса. К сожалению, я не могу открыть его снова. Вместо этого я ответил на связанный вопрос, потому что понял, как это работает.   -  person frankenapps    schedule 07.05.2020