SQLITE(fmdb)选择x为null的位置不起作用

时间:2012-10-30 02:56:31

标签: ios sqlite fmdb isnull

我在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);

2 个答案:

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