无法使用SWIFT

时间:2016-06-24 07:01:41

标签: ios swift sqlite fmdb

这是我的功能,我正在尝试更新表格中的字段count。但它没有更新价值。查询是100%正常,因为我已经在外部数据库软件中尝试过。可能是我使用了错误的函数来执行我的陈述?

    func updateLocalCount(var localCounter: Int)
    {
        let contactDB = FMDatabase(path: databasePath as String)
        if contactDB.open()
        {
            let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'"
            let results:FMResultSet? = contactDB.executeQuery(querySQL,
                withArgumentsInArray: nil)
            print(querySQL)
            contactDB.close()
            print("local count \(localCounter)")
        }
        else
        {
            print("Error: \(contactDB.lastErrorMessage())")
        }
    }

2 个答案:

答案 0 :(得分:3)

您应该使用executeUpdate,而不是executeQuery来进行更新查询。通过调用executeQuery(并且从不调用next),您只需准备一个查询,但从未执行过。

所以,它可能如下所示:

func updateLocalCount(counter: Int, title: String) {
    let contactDB = FMDatabase(path: databasePath as String)
    if contactDB.open() {
        defer { contactDB.close() }
        do {
            try contactDB.executeUpdate("UPDATE Darood SET count=? WHERE title=?", values: [counter, title])
        } catch {
            print(error)
        }
    } else {
        print("Error: \(contactDB.lastErrorMessage())")
    }
}

在一个不相关的观察中,您会注意到,在上面,我在SQL中使用了?占位符,而不是使用字符串插值构建SQL。如果不使用占位符,就可以解决一系列可能出现的问题。

答案 1 :(得分:0)

我确定您使用myTitle作为选项值,如果它是可选的 试试这个

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle!)'"

或者myTitle必填字段并将空("")指定为默认值。 然后

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'"