FMDB: значения NULL извлекаются как пустые строки
Я извлекаю запись о клиенте с помощью FMDB и Swift, используя (упрощенную) функцию, приведенную ниже. Когда необязательное значение в title
столбец NULL
элемент title возвращенного объекта customer является пустой строкой, а не 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
}
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")
}
}
}
Что выводит:
бар = баз
бар ноль
Возможно, вы захотите перепроверить, как значения были вставлены. В частности, были добавлены пустые значения с использованием NSNull
? Или, возможно, откройте базу данных во внешнем инструменте и убедитесь, что столбцы действительно NULL
как ты и ожидал.