Ios 如何在swift中存储sqlite blob
我有从web服务接收并转换为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
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的,这没有帮助。很容易把两者混淆。