Исключение при чтении пустой таблицы - PullRequest
0 голосов
/ 10 сентября 2010

Я пытаюсь прочитать данные из таблицы. Изначально он пуст. Если я попытался прочитать в то время, это вызовет исключение. Мой код указан ниже

-(NSMutableArray *) selectDataFrom:(NSString *) tableName
{   
    NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM '%@' ",tableName];  
    sqlite3_stmt *statement;
    if (sqlite3_prepare_v2( dataBase, [qsql UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        NSLog(@"INSIDE IF");                    
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSLog(@"INSIDE WHILE");         
            // my code
        }
    }
    return allData; 
}   

Первый NSLog («INDISE IF»); печатается. Но второй не печатает.

Упомяните несколько книг для изучения операторов sqlite3 на iPhone [например: sqlite_prepare_v2 ();] не SQL

[Извините за мой плохой английский]

ЭТО ПОЛНЫЙ КОД

-(NSMutableArray *) selectDataFrom:(NSString *) tableName
{

    allData = [[NSMutableArray alloc] init];
    NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM '%@' ",tableName];
    sqlite3_stmt *statement;

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


        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSLog(@"REACHED 1");            
            myProgram = [[Programs alloc] init];    

            char *date  = (char *) sqlite3_column_text(statement, 0);
            myProgram.nss_Date = [[NSString alloc] initWithUTF8String:date];            

            char *type  = (char *) sqlite3_column_text(statement, 3);
            myProgram.nss_Type = [[NSString alloc]initWithUTF8String:type];

            [nsma_allDonorsMA addObject:d_OneDonor];        
        }
    }
    else {
        //      NSLog(@"failed to select data");

    }
    return allData;
}

Ответы [ 2 ]

1 голос
/ 10 сентября 2010

Попробуйте включить точки останова для исключений и запустите ваше приложение в отладчике.Он покажет вам точно, куда вы звоните objectAtIndex:.(В приведенном выше коде это , а не )

0 голосов
/ 10 сентября 2010

Где ваш sqlite3_finalize () ??

Вы должны освободить структуру sqlite3_stmt в своем блоке sqlite3_prepare_v2 следующим образом.

sqlite3_stmt *sql_stmt; 
if (sqlite3_prepare_v2(...) == SQLITE_OK)
{
    ....

    sqlite3_finalize(sql_stmt);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...