FMDB:NULL值检索为空字符串(FMDB: NULL Values Are Retrieved

2019-10-24 11:36发布

我检索客户记录与FMDB和斯威夫特使用下面的(简化)功能。 当在可选的值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
}

Answer 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喜欢你的预期。



文章来源: FMDB: NULL Values Are Retrieved as Empty Strings