从SELECT sql语句中获取行

时间:2013-12-28 19:08:19

标签: sql objective-c sqlite

我有一个数据库,我在SQL上为10个随机行做了一个S ELECT语句。 它适用于Iphone App,所以Objective C。

如何在声明后收回信息?

...
 const char *sql3 = [[NSString stringWithFormat:@"SELECT id FROM tabledesquestions ORDER BY RANDOM() LIMIT 10"] cStringUsingEncoding:NSUTF8StringEncoding];

    sqlite3_stmt *sql1Statement;
    if(sqlite3_prepare(database1, sql3, -1, &sql1Statement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with prepare statement");
    }

while (sqlite3_step(sql1Statement)==SQLITE_ROW) {

     numeroqdonnee = sqlite3_column_int(sql1Statement, 0);
       }

现在,我回到第一行的信息。我怎样才能找回其他行的信息(id)。

I would like something like that 
numeroqdonnee2 =
numeroqdonnee3 =
numeroqdonnee4 =
...

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以将结果添加到某个数组:

const char *sql3 = [[NSString stringWithFormat:@"SELECT id FROM tabledesquestions ORDER BY RANDOM() LIMIT 10"] cStringUsingEncoding:NSUTF8StringEncoding];

NSMutableArray *results = [NSMutableArray array];

sqlite3_stmt *sql1Statement;
int returnCode;
if(sqlite3_prepare(database1, sql3, -1, &sql1Statement, NULL) != SQLITE_OK)
{
    NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(database1));
}
else 
{
    while ((returnCode = sqlite3_step(sql1Statement)) == SQLITE_ROW) {
        numeroqdonnee = sqlite3_column_int(sql1Statement, 0);
        [results addObject:@(numeroqdonnee)];
    }
    if (returnCode != SQLITE_DONE)
        NSLog(@"Problem with step statement: %s", sqlite3_errmsg(database1));

    sqlite3_finalize(sql1Statement);
}

// now do whatever you want with this results array

NSLog(@"results = %@", results);

// or

[results enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"numeroqdonnee%d = %d", idx, [obj integerValue]);
}];

或者您可以直接记录结果:

const char *sql3 = [[NSString stringWithFormat:@"SELECT id FROM tabledesquestions ORDER BY RANDOM() LIMIT 10"] cStringUsingEncoding:NSUTF8StringEncoding];

sqlite3_stmt *sql1Statement;
int returnCode;
if(sqlite3_prepare(database1, sql3, -1, &sql1Statement, NULL) != SQLITE_OK)
{
    NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(database1));
}
else 
{
    while ((returnCode = sqlite3_step(sql1Statement)) == SQLITE_ROW) {
        numeroqdonnee = sqlite3_column_int(sql1Statement, 0);
        NSLog(@"numeroqdonnee = %d", numeroqdonnee);
    }
    if (returnCode != SQLITE_DONE)
        NSLog(@"Problem with step statement: %s", sqlite3_errmsg(database1));

    sqlite3_finalize(sql1Statement);
}

注意,如果您有任何问题,我建议您记录sqlite3_errmsg(否则您只是盲目飞行)。我还添加了sqlite3_finalize(您的原始代码示例可能已经有了,但我只是想确定)。