1

以下のメソッドは、sqlite3 データベースに対して実行されます。これは、パラメータ (flds) として渡された配列内の各外部キーに一致するレコードのすべての主キーをフェッチすることを目的としています。

- (NSArray*) columnPrimaryKeysForFields:(NSArray*)flds
{
    NSMutableArray* retval = [[NSMutableArray alloc] init];
    NSString* query = @"SELECT ID FROM Pages WHERE FieldID = ? ORDER BY ID";
    sqlite3_stmt* statement;
    if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) 
    {
        for (NSNumber* fieldID in flds)
        {
            sqlite3_bind_int64(statement, 1, (int)[fieldID longValue]);

            while (sqlite3_step(statement) == SQLITE_ROW) 
            {
                [retval addObject:[NSNumber numberWithInteger:sqlite3_column_int(statement, 0)]];
            }
        }

        sqlite3_finalize(statement);
    }
    else
    {
        NSLog(@"SQL PREPARE columnPrimaryKeysForFields failed");
    }

    return [NSArray arrayWithArray:retval];
}

データベースには、flds の各キーを含む複数のレコードがあります。メソッドが実行されると、flds の最初のキーを含むすべてのレコードがフェッチされますが、flds の後続の各キーを含む最初のレコードのみがフェッチされます。flds の最初のキーが正しい数のレコードを取得するのに、後続のキーが取得しない理由がわかりません。

よろしくお願いします。

4

1 に答える 1

0

最後の呼び出しの後にsqlite3_resetを呼び出す必要がありstepます。

于 2013-03-08T08:28:20.130 に答える