对sqlite3数据库执行重复语句

时间:2013-03-07 20:20:11

标签: xcode sqlite

以下方法针对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];
}

在数据库中,有多个记录包含fld中的每个键。当该方法执行时,它将获取包含fld中第一个键的所有记录,但仅包含包含fld中每个后续键的第一个记录。我无法弄清楚为什么fld中的第一个键获取正确数量的记录但后续键不能。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您必须在最后一次step来电后致电sqlite3_reset