2015-08-03 2 views
1

Я извлекаю запись клиента с помощью FMDB и Swift с использованием (упрощенной) функции ниже. Когда необязательным значением в столбце title является NULL, элемент названия возвращаемого объекта клиента представляет собой пустую строку, а не nil, что вводит в заблуждение. Может ли это быть переписано так, чтобы значения NULL были получены как nil? - Идеально без тестирования пустых строк и установки nil явно (также неправильно, если значение на самом деле является пустой строкой)?FMDB: значения NULL берутся как пустые строки

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

Из [исходного кода] (https://github.com/ccgus/fmdb/blob/master/src/fmdb/FMResultSet.m#L273) Я бы предположил, что значение NULL * * возвращается как «nil» '. –

+1

Я думал, что проверил, проверив базу данных. Проверено снова - и вы правы. И я смущен. – jerry

ответ

1

The 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, как и ожидалось.

+1

Вы правы, и новые записи действительно вставлены таким образом. Я, должно быть, искал некоторые старые данные, которые были добавлены неправильно. Спасибо, что объяснили это здесь. Я оставлю вопрос, так как ваш ответ может мне помочь другим. – jerry

Смежные вопросы