一尘不染

迅速的sqlite不稳定

swift

我已经设置了swift项目来使用sqlite。有时,插入时实际上并没有插入正确(或全部)的值。我知道,因为我重新启动了该应用程序,并且当我再次输入时,输入是随机错误(未插入内容)或为零。但有时是正确的。

这是我设置的位置,是的,插入之前数据正确。

let update = "INSERT INTO ToDoItem (itemName, completed, goalDate) " + "VALUES (?, ?, ?);"
var statement: COpaquePointer = nil
if sqlite3_prepare_v2(database, update, -1, &statement, nil) == SQLITE_OK {
    let itemName = item.itemName as String
    let completed = item.completed == true ? 1 : 0

    sqlite3_bind_text(statement, 1, itemName, -1, nil)
    sqlite3_bind_int(statement, 2, Int32(completed))

    if let goalDate = item.goalDate?.toString() {
        sqlite3_bind_text(statement, 3, goalDate, -1, nil)
    } else {
        sqlite3_bind_text(statement, 3, "", -1, nil)
    }

    //println("inserting \(itemName), \(completed) and \(item.goalDate?.toString())")
    //println("")
}

if sqlite3_step(statement) != SQLITE_DONE {
    println("error updateing table")
    sqlite3_close(database)
    return
}
sqlite3_finalize(statement)

sqlite3_close(database)

您可以在中间看到注释掉的println,如果没有注释掉,则itemName有时会成为该字符串的一部分。


阅读 272

收藏
2020-07-07

共1个答案

一尘不染

我有同样的问题。我找到了解决此问题的方法。

sqlite3_bind_text(statement, 1, itemName, -1, nil) --> itemName should be UTF8 String

您应该将itemNameas 转换为,NSString然后使用UTF8String来将字符串转换为UTF8。正确的代码在这里是相同的

let itemName = item.itemName as NSString
sqlite3_bind_text(statement, 1, itemName.UTF8String, -1, nil)

祝好运。

2020-07-07