2

iOSでFMDBを使用していて、次のようなステートメントでテーブルをクエリしようとしています。

select * from test where foo isNull

sqlite C APIでは、これはこのAPIを使用してnullにバインドすることになります。

int sqlite3_bind_null(sqlite3_stmt*, int);

これは機能していません。列をnullに正しくバインドしているように見えるfmdbを介して呼び出された選択は、一致するレコードを検出していません。

sqlite3コマンドラインセッションで次のコマンドを実行すると、機能しますが、FMDBを介したsqliteCAPIでは機能しません。

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);
4

2 に答える 2

3

NULL=演算子と比較することはできません。それ自体でさえ、どの値とも等しくありません。

と比較するには、次の演算子NULLを使用する必要があります。IS NULL

stmt = @"select * from test where shipToCode is null";
于 2012-10-30T08:17:34.870 に答える
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);
于 2012-10-30T06:07:09.163 に答える