Возврат данных с помощью sqlite - PullRequest
0 голосов
/ 26 января 2012

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

-(void)revertData
{   
if(revertStmt == nil) {
    const char *sql = "select signature, sigdate from signatureDB where id = ?";
    if(sqlite3_prepare_v2(database, sql, -1, &revertStmt, NULL) != SQLITE_OK){
        UIActionSheet *msg = [[UIActionSheet alloc] 
                              initWithTitle:[NSString stringWithFormat:@"Error while inserting data. '%s'", sqlite3_errmsg(database)] 
                              delegate:nil 
                              cancelButtonTitle:nil  destructiveButtonTitle:nil 
                              otherButtonTitles:@"Okay", nil];
        [msg showInView:[UIApplication sharedApplication].delegate.window];
    }
}

sqlite3_bind_int(revertStmt, 0, myID);

if(SQLITE_DONE == sqlite3_step(revertStmt)) {

     self.signature = [NSString stringWithUTF8String:(char *)sqlite3_column_text(revertStmt, 0)];
     self.sigdate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(revertStmt, 1)];
}
sqlite3_reset(revertStmt);

}

1 Ответ

0 голосов
/ 27 января 2012

У вас есть пара проблем;

1) Кажется, у вас есть проблема в вашем операторе sqlite3_bind_int, вы передаете 0 в качестве индекса, в то время как документация сообщает

Второй аргумент - это индекс параметра SQL, который нужно установить.Крайний левый параметр SQL имеет индекс 1.

2) Вы проверяете, является ли возвращаемое значение из sqlite3_step SQLITE_DONE (что означает, что у него больше нет строк, в данном случае вообще нет строк, так как идентификатор isnне установлен из-за проблемы 1).sqlite_column_ * действителен, только если возвращаемое значение равно SQLITE_ROW, поэтому ваш вызов sqlite3_column_text будет взорван.

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