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_resetstep

于 2013-03-08T08:28:20.130 回答