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 как ты и ожидал.

Другие вопросы по тегам