while(sqlite3_step(statement)== SQLITE_ROW)循环永远不会执行

R. *_*ewi 4 sqlite while-loop ipad

大家好我在IOS中使用sqlite有一些问题.我从数据库中选择数据,然后我想将该数据保存在变量中.但是当我使用while(sqlite3_step(statement) == SQLITE_ROW)循环时,代码永远不会执行.

这是我的代码:

-(void)retrieveProjectNameFromDb:(NSString *)segmenId{
NSString *query;
NSString *nameProjectStr; 

NSString *dbPath = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"];
if (sqlite3_open([dbPath UTF8String], &db) != SQLITE_OK) {
    sqlite3_close(db);
    NSAssert(0, @"Database failed to open.");

}else {
    query = [NSString stringWithFormat:@"SELECT remote_projectname, remote_base_uri FROM REMOTE_SETTING WHERE remote_settingid = '%@' ORDER BY remote_projectname", segmenId];
    NSLog(@"query : %@", query);
}

sqlite3_stmt *statement;


if(sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, nil)==SQLITE_OK){

    NSLog(@"sqlite row : %d", SQLITE_ROW);
    NSLog(@"sqlite 3 : %d", sqlite3_step(statement));

    while (sqlite3_step(statement) == SQLITE_ROW) {


        char *nameProject = (char *)sqlite3_column_text(statement, 0);
        if (nameProject == nil) {
            NSLog(@"UNNAMED");
        }else {
            NSLog(@"else");

            nameProjectStr = [NSString stringWithUTF8String:nameProject];
        }

        projectName.text = nameProjectStr;
        nameProject = nil;  
    }

    NSLog(@"project name : %@", projectName.text);


    sqlite3_close(db);

}
Run Code Online (Sandbox Code Playgroud)

}

当我的nslog值,sqlite3_step(语句)总是显示101和sqlite_row总是显示100.为什么会发生?请问有人可以帮助我吗?

谢谢

问候

-risma-

san*_*ndy 6

正如你所提到的,sqlite3_step(语句)总是显示101,这意味着sqlite3_step已经完成执行,因此这意味着你的sql查询没有从数据库返回任何行.我建议您首先检查数据库中是否存在REMOTE_SETTING表中存在的任何记录,表示您正在引用的remote_settingid.

为了您的参考,我从sqlite.org获取了以下常量片段

#define SQLITE_DONE        101  /* sqlite_step() has finished executing */
Run Code Online (Sandbox Code Playgroud)