1

在尝试将记录插入数据库时​​,我利用用户将一些字段留空,即 nil 字符串。现在,当我将数据插入数据库时​​,我在数据源为 nil 的每一列中得到(null)而不是 nil 值。当我从数据库中获取记录并将其显示给用户时,他留空的值现在显示为(null)。

我可以实现逻辑来检查这个'(null)'字符串,但我想应该有一些方法可以在数据库级别处理它。我的意思是如果我插入一个 nil 值,那么它应该是 nil 或空而不是(null)字符串。谁能帮我解决这个问题?谢谢

4

2 回答 2

3

当您使用带有“%@”格式说明符的字符串格式,并且相应的对象指针值为nil时,格式化的字符串在该位置获得“(null)”。因此,您或您正在使用的库正在这样做。

在字符串格式之外,我不知道任何会突然产生“(null)”的东西。

于 2012-06-13T13:42:29.863 回答
0

Ken Thomases 的回答是正确的,因为您正在"(null)"退出数据库,因为您在"(null)"没有意识到的情况下将其放入数据库。

我只是想补充一点,当您将记录插入数据库时​​,您可以确保将可选字符串作为NULL值插入,如下所示:

let nullableStringValue: String

if let stringValue = myObject.myOptionalProperty {
    nullableStringValue = "'\(stringValue)'"
} else {
    nullableStringValue = "NULL"
}

let insertStatement = "INSERT INTO MyTable (MyNullableColumn) VALUES (\(nullableStringValue))"

// proceed to execute the insert statement

然后,当您查询数据库时,您可以读取可能为 null 的值,如下所示:

let myNullableColumnText: String?

if let myNullableColumnTextPointer = sqlite3_column_text(compiledSelectStatement, columnIndex) {
    myNullableColumnText = String(cString: myNullableColumnTextPointer)
} else {
    myNullableColumnText = nil
}
于 2019-12-09T17:20:07.587 回答