【发布时间】:2018-08-14 00:04:04
【问题描述】:
我正在使用 SQLite 通过以下代码获取数据。
func idToName(id: String) -> String {
do {
if (id == "") {
return ""
} else {
var SqlQuery="Select kod from id where idText="
SqlQuery.append("\""+id+"\"")
let stmt = try db?.prepare(SqlQuery)
let tempScalar = try stmt?.scalar() as! String
return tempScalar
}
} catch {
print("failed")
}
return ""
}
语句中有一个 do try catch 块。但是,当 tempScalar 变量为零时,它不会在 catch 块中捕获并出现错误,我该如何改进或修复该代码?
【问题讨论】:
-
不强制转换,而是使用
if let。 -
为什么不直接说
let tempScalar = try stmt?.scalar() as? String ?? ""并使用 nil 合并运算符? -
请注意,您的代码容易受到SQL injection的攻击
-
@MartinR 我怎样才能让它更安全?
-
阅读准备好的语句和绑定。 – 显然您正在使用 SQLite.swift,它有许多用于数据库查询的高级方法,例如参见 Building Complex Queries。