Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中存储sqlite blob_Ios_Swift_Sqlite_Blob - Fatal编程技术网

Ios 如何在swift中存储sqlite blob

Ios 如何在swift中存储sqlite blob,ios,swift,sqlite,blob,Ios,Swift,Sqlite,Blob,我有从web服务接收并转换为UIImage的图像。我需要将它们作为sqlite blob存储在数据库中 这是数据库表: 我尝试使用NSData将其存储为blob 以下是我尝试过的: let image = UIImage(data: decodedData) let data = image!.pngData()! as NSData let recurso1 = Recurso(idRecurso: 1, recurso: "paisaje1", _extension: "png", con

我有从web服务接收并转换为
UIImage
的图像。我需要将它们作为
sqlite blob
存储在数据库中

这是数据库表:

我尝试使用
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
    }
}
我总是得到同样的错误:

错误al-ejecutar插入:
数据类型不匹配

我确信数据库连接和图像是正确的


我做错了什么?

参数编号从1开始,而不是从0开始。因此,您试图将字符串绑定到integer主键列,这仅在字符串内容可以无损地转换为整数时才有效。

从结果行检索值是基于0的,这没有帮助。很容易把两者混淆。