无法使用 SWIFT 更新数据库 FMDB 中的字段

Unable to update a field in database FMDB using SWIFT

这是我的函数,我在其中尝试更新 table 中的字段 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())")
        }
    }

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

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

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

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

您应该使用 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。如果您不使用占位符,您将面临一系列可能的问题。