Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

while(sqlite3_step(statement) == SQLITE_ROW) loops never execute

hi all i have some problem in using sqlite in IOS. i have select data from database, and then i want to save that data in a variable. But when i use while(sqlite3_step(statement) == SQLITE_ROW) loop, the code never execute.

here is my code :

-(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);

}

}

when i nslog the value, sqlite3_step(statement) always show 101 and sqlite_row always show 100. Why it can happen?? can somebody help me, please?

thank you

Regards

-risma-

like image 915
R. Dewi Avatar asked Jan 20 '23 14:01

R. Dewi


2 Answers

As you mentioned sqlite3_step(statement) always show 101 which means sqlite3_step has finished executions hence it means your sql query is not returning any rows from database. I would recommend you to first check in database if any record exists in table REMOTE_SETTING for remote_settingid which you are referring.

For your reference I took following constant snippet from sqlite.org

#define SQLITE_DONE        101  /* sqlite_step() has finished executing */
like image 91
sandy Avatar answered Jan 29 '23 11:01

sandy


Remove the NSLog entry in which you are having sqlite3_step(). Since you have your NSLog statement executing sqlite3_step(), the record is already stepped through here. Hence, your while loop won't execute as there are no more rows to step through. I think this will surely help you. :)

like image 40
Mohd Asim Avatar answered Jan 29 '23 13:01

Mohd Asim