这是我的功能,我正在尝试更新表格中的字段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())")
}
}
答案 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)'"