while(sqlite3_step(statement1)== SQLITE_ROW)即使在iPhone中两个值相等也不起作用

时间:2012-03-19 15:15:06

标签: iphone ios sqlite

我不知道确切的问题,但现在已经摸不着头脑了近4个小时。

    if (sqlite3_open([dataBasePath UTF8String], &bookDB) == SQLITE_OK) {


    NSString *Query = [NSString stringWithFormat:@"SELECT * FROM linktable WHERE pageid = 2"];

    if (sqlite3_prepare_v2(bookDB, [Query UTF8String], -1, &statement1, nil) == SQLITE_OK) {

        markupsArray = [NSMutableArray arrayWithCapacity:1];

        NSLog(@"sqlite3_step(statement1) is %d",sqlite3_step(statement1));

        while (sqlite3_step(statement1) == SQLITE_ROW) {
            NSLog(@"yup");

            MarkupData *markUpObject = [[MarkupData alloc] init];

            markUpObject.linkID =  [[[NSString alloc] initWithUTF8String:(const char*) sqlite3_column_text(statement1, 0)] autorelease];
            markUpObject.pageID =  [[[NSString alloc] initWithUTF8String:(const char*) sqlite3_column_text(statement1, 1)] autorelease];
            markUpObject.markupID =  [[[NSString alloc] initWithUTF8String:(const char*) sqlite3_column_text(statement1, 2)] autorelease];
            markUpObject.folioNumber =  [[[NSString alloc] initWithUTF8String:(const char*) sqlite3_column_text(statement1, 5)] autorelease];


            [markupsArray addObject:markUpObject];
        }
    }
}

这是奇怪的事情。 sqlite3_step(statement1)的值为100,SQLITE_ROW的值也是100。但即使这样,while循环也没有被执行。任何人都可以帮我解决这个奇怪的场景吗...刚刚来到这里...... :(

1 个答案:

答案 0 :(得分:2)

如果您的sqlite查询只返回1条记录,sqlite3_step()实际上会逐步完成记录。由于您的NSLog语句正在执行sqlite3_step(),因此该记录已在此处逐步执行。因此,您的while循环将不会执行,因为没有更多行要逐步执行。