我正在向数据库表插入值。我有声明获取数据和插入。如果我没有任何值,我需要插入空白而不是NULL
[parentDict setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)== NULL?"":(char *)sqlite3_column_text(compiledStatement, 5)] forKey:@"AM_Answer"];
答案 0 :(得分:0)
你只是感觉parentDict
。将所有值放入其中后,请检查您不想要NULL值的键。
if([parentDict objectForKey:@"AM_Answer"] == NULL)
[parentDict setObject:@"" forKey:@"AM_Answer"];
答案 1 :(得分:0)
通常,您在字典中插入[NSNull null]
以表示空值:
const char *column5 = sqlite3_column_text(compiledStatement, 5);
if (column5 == NULL)
[parentDict setObject:[NSNull null] forKey:@"AM_Answer"];
else
[parentDict setObject:[NSString stringWithUTF8String:(char *) column5] forKey:@"AM_Answer"];
您也可以使用零长度字符串(例如@""
),但通常最好区分空值和零长度字符串。
就将空值插入数据库而言,您可以使用SQL NULL
值:
int rc;
if ((rc = sqlite3_exec(db, "insert into test (column_a, column_b) values ('valueA', null)", NULL, NULL, NULL)) != SQLITE_OK)
NSLog(@"insert failed %d: %s", rc, sqlite3_errmsg(db));
或者,如果您正在对值进行动态绑定,则可以使用sqlite3_bind_null()
函数:
sqlite3_stmt *statement;
if ((rc = sqlite3_prepare_v2(db, "insert into test (column_a, column_b) values (?, ?)", -1, &statement, NULL)) != SQLITE_OK)
NSLog(@"prepare failed %d: %s", rc, sqlite3_errmsg(db));
NSString *valueA = @"valueA";
if ((rc = sqlite3_bind_text(statement, 1, [valueA UTF8String], -1, SQLITE_TRANSIENT)) != SQLITE_OK)
NSLog(@"bind a failed %d: %s", rc, sqlite3_errmsg(db));
if ((rc = sqlite3_bind_null(statement, 2)) != SQLITE_OK)
NSLog(@"bind b failed %d: %s", rc, sqlite3_errmsg(db));
if ((rc = sqlite3_step(statement)) != SQLITE_DONE)
NSLog(@"step failed %d: %s", rc, sqlite3_errmsg(db));
sqlite3_finalize(statement);
如果您使用FMDB:
,后一个示例会大大简化BOOL success = [db executeUpdate:@"insert into test (column_a, column_b) values (?, ?)", @"valueA", [NSNull null]];
if (!success)
NSLog(@"Insert failed: %@", [db lastErrorMessage]);