我在iOS上使用FMDB,尝试使用诸如
之类的语句查询表select * from test where foo isNull
在sqlite C API中,这最终使用此API绑定到null,
int sqlite3_bind_null(sqlite3_stmt*, int);
这不起作用。通过fmdb调用的select似乎正确地将列绑定为null并未找到匹配的记录。
如果在sqlite3命令行会话中我执行以下命令,它可以工作,但不能通过FMDB通过sqlite C API。
select * from test where foo isNull;
这是重现问题的fmdb代码。看起来fmdb正在执行调用sqlite3_bind_null的正确步骤。
NSString *stmt = @"select * from test where shipToCode=:foo";
NSDictionary *dict = @{@"foo" : [NSNull null]};
FMResultSet *rs = [db executeQuery:stmt withParameterDictionary:dict];
int count = 0;
while ([rs next]) {
count++;
}
NSLog(@"Count %d", count);
答案 0 :(得分:3)
NULL
无法与=
运算符进行比较;它与任何值不相等,即使是它自己。
要与NULL
进行比较,您必须使用IS NULL
运算符:
stmt = @"select * from test where shipToCode is null";
答案 1 :(得分:0)
尝试以下操作并检查是否有任何更改:
NSString *query = @"SELECT * FROM test WHERE shipToCode is NULL";
FMResultSet *rs = [db executeQuery:query];
int count = 0;
while ([rs next]) {
count++;
}
NSLog(@"Count %d", count);