Как хранить каплю sqlite в Swift - PullRequest
0 голосов
/ 06 июня 2019

У меня есть изображения, полученные с веб-службы и преобразованные в UIImage.Мне нужно хранить их как sqlite blob в базе данных.

Это таблица базы данных:

enter image description here

Я пыталсяиспользуйте NSData, чтобы сохранить его как blob

Вот что я пробовал:

let image = UIImage(data: decodedData)
let data = image!.pngData()! as NSData
let recurso1 = Recurso(idRecurso: 1, recurso: "paisaje1", _extension: "png", contenido: data)

if !dataManager.insertRecurso(db, recurso: recurso1) {
    print("No se pudo registrar recurso")
}

Функция вставки:

let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)

func insertRecurso(_ db: OpaquePointer?, recurso: Recurso) -> Bool {
    var stmt: OpaquePointer? = nil;
    let sql = "INSERT INTO recurso(idRecurso, recurso, extension, contenido) VALUES(?, ?, ?, ?)";

    if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) == SQLITE_OK {
        sqlite3_bind_int(stmt, 0, Int32(recurso.idRecurso))
        sqlite3_bind_text(stmt, 1, recurso.recurso, -1, SQLITE_TRANSIENT)
        sqlite3_bind_text(stmt, 2, recurso._extension, -1, SQLITE_TRANSIENT)
        sqlite3_bind_blob(stmt, 3, recurso.contenido.bytes, Int32(recurso.contenido.length), SQLITE_TRANSIENT)

        if sqlite3_step(stmt) != SQLITE_DONE {
            let errorMessage = String.init(cString: sqlite3_errmsg(db))
            print("Error al ejecutar insert:", errorMessage)
            sqlite3_finalize(stmt)
            return false;
        }

        sqlite3_finalize(stmt)
        return true
    } else {
        let errorMessage = String.init(cString: sqlite3_errmsg(db))
        print("Error al preparar sentencia:", errorMessage)
        return false
    }
}

И я всегдаполучаю ту же ошибку:

Error al ejecutar insert: несоответствие типа данных

Я уверен, что соединение с базой данных и изображение правильные.

Что я делаюнеправильно?

1 Ответ

1 голос
/ 06 июня 2019

Нумерация параметров начинается с 1, а не с 0. Таким образом, вы пытаетесь привязать строку к целочисленному столбцу первичного ключа, который работает, только если содержимое строки можно без потерь преобразовать в целое число.

...