在尝试将记录插入数据库时,我利用用户将一些字段留空,即nil字符串。现在,当我将数据插入到DB中而不是nil值时,我在每个数据源为nil的列中得到(null)。当我从数据库中获取记录并将其显示给用户时,他留空的值现在显示为(null)。
我可以实现逻辑来检查这个'(null)'字符串,但我想应该有一些方法可以在数据库级别处理它。我的意思是如果我插入一个nil值,那么它应该是nil或empty not(null)string。任何人都可以帮我解决这个问题吗? 感谢
答案 0 :(得分:3)
当您使用带有“%@”格式说明符的字符串格式,并且相应的对象指针值为nil
时,格式化的字符串在该位置获得“(null)”。所以,无论是你或你正在使用的图书馆都是这样做的。
在字符串格式化之外,我不知道任何会产生“(null)”的东西。
答案 1 :(得分:0)
肯·托马斯(Ken Thomases)的回答是正确的,因为您将"(null)"
从数据库中移出,"(null)"
却没有意识到。
我只是想补充一点,当您将记录插入数据库时,可以确保将可选字符串作为NULL
值插入,如下所示:
var nullableStringValue = "NULL";
if let stringValue = myObject.myOptionalProperty {
nullableStringValue = "'\(stringValue)'"
}
let insertStatement = "INSERT INTO MyTable (MyNullableColumn) VALUES (\(nullableStringValue))"
// proceed to execute the insert statement
然后在查询数据库时,您可以读取可能为null的值,如下所示:
var myNullableColumnText: String? = nil
if let myNullableColumnTextPointer = sqlite3_column_text(compiledSelectStatement, columnIndex) {
myNullableColumnText = String(cString: myNullableColumnTextPointer)
}