我正在使用下面的(简化)函数使用FMDB和Swift检索客户记录。当title
列中的可选值为NULL
时,返回的客户对象的标题成员为空字符串而不是nil
,这会产生误导。 是否可以对其进行重写,以便将NULL
值检索为nil
? - 理想情况下,不对空字符串进行测试并明确设置nil
(如果该值实际上是一个空字符串)?
func getCustomerById(id: NSUUID) -> Customer? {
let db = FMDatabase(path: dbPath as String)
if db.open() {
let queryStatement = "SELECT * FROM Customers WHERE id = ?"
let result = db.executeQuery(queryStatement, withArgumentsInArray: [id.UUIDString])
while result.next() {
var customer = Customer();
customer.id = NSUUID(UUIDString: result.stringForColumn("customerId"))
customer.firstName = result.stringForColumn("firstName")
customer.lastName = result.stringForColumn("lastName")
customer.title = result.stringForColumn("title")
return customer
}
}
else {
println("Error: \(db.lastErrorMessage())")
}
return nil
}
答案 0 :(得分:1)
NULL
值将返回nil
:
db.executeUpdate("create table foo (bar text)", withArgumentsInArray: nil)
db.executeUpdate("insert into foo (bar) values (?)", withArgumentsInArray: ["baz"])
db.executeUpdate("insert into foo (bar) values (?)", withArgumentsInArray: [NSNull()])
if let rs = db.executeQuery("select * from foo", withArgumentsInArray: nil) {
while rs.next() {
if let string = rs.stringForColumn("bar") {
println("bar = \(string)")
} else {
println("bar is null")
}
}
}
输出:
bar = baz左栏为空
您可能想要仔细检查值的插入方式。具体来说,是否使用NSNull
添加了空值?或者也许在外部工具中打开数据库,并验证列是否与您预期的一样NULL
。