无法使用 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。如果您不使用占位符,您将面临一系列可能的问题。
这是我的函数,我在其中尝试更新 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。如果您不使用占位符,您将面临一系列可能的问题。