[英]Unable to update a field in database FMDB using SWIFT
這是我要在其中更新表中字段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())")
}
}
您應該將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。 如果不使用占位符,則會面臨一系列可能的問題。
我確定您使用myTitle
作為選項值,如果它是可選的,請嘗試
let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle!)'"
或將myTitle
必填字段,並將空("")
分配為默認值。 接着
let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.