[swift]而不是文本 Sqlite3 插入 Blob

标签: sqlite3 ios Swift
发布时间: 2016/9/3 14:32:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这种方式已创建activity实体︰

CREATE TABLE ACTIVITY (ID INTEGER PRIMARY KEY, TYPE TEXT, DESCRIPTION TEXT);

我想通过这种方式 Sqlite3 数据库中保存activity对象︰

func save(database:COpaquePointer) -> Int
{
    let id = getMaxActivityId(database) + 1;
    let insertQuery = "INSERT INTO ACTIVITY (TYPE, ID, DESCRIPTION) VALUES (?,?,?);"
    var statement:COpaquePointer = nil
    if sqlite3_prepare_v2(database, insertQuery, -1, &statement, nil) == SQLITE_OK
    {
        sqlite3_bind_text(statement, 1,type, -1, nil)
        sqlite3_bind_int(statement, 2, Int32(id))

        sqlite3_bind_text(statement, 3, description ?? "", -1, nil)
    }

    if sqlite3_step(statement) != SQLITE_DONE
    {
        let e = NSException(name: "Failed to insert Activity", reason: nil, userInfo: nil)
        e.raise()
    }
    sqlite3_finalize(statement)
    return id
}

值为︰

activity.type = "Walking"
activity.id = 12
activity.description = Optional(nil)

检索数据时,它似乎是不一致的和如果我尝试下载的应用程序容器和检查数据库,我可以看到,在类型字段,而不是字符串被插入 BLOB 类型︰

enter image description here enter image description here

如果我试着将类型更改为"文本"它显示此消息︰

enter image description here

我正在使用的应用程序是"Sqlite 浏览"3.8.0 Os X。

解决方法 1:

后来我发现我应该要将字符串保存为 UTF8,并不只是一片平原 Swift 字符串,否则我可能会不受欢迎的行为︰

sqlite3_bind_int(statement, 1, Int32(id))
sqlite3_bind_text(statement, 2,(type as NSString).UTF8String, -1, nil)

let desc = (description ?? "") as NSString
sqlite3_bind_text(statement, 3, desc.UTF8String, -1, nil)

我找到了解决这一问题

官方微信
官方QQ群
31647020