Sqlite为nil NSStrings插入'(null)'

时间:2012-06-13 08:42:23

标签: objective-c ios sqlite

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

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

2 个答案:

答案 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)
}