使用sqlite恢复数据

时间:2012-01-26 19:48:40

标签: iphone sqlite

我一直在盯着这段代码。研究替代品但它们似乎不起作用。请告诉我,我已经看了一些东西。

-(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 :(得分:0)

你有几个问题;

1)您的sqlite3_bind_int语句中似乎有问题,在文档声明

时传入0作为索引
  

第二个参数是要设置的SQL参数的索引。该   最左边的SQL参数的索引为1.

2)检查sqlite3_step的返回值是否为SQLITE_DONE(这意味着它没有更多行,在这种情况下根本没有行,因为问题1没有设置id)。 sqlite_column_ *仅在返回值为SQLITE_ROW时有效,因此您对sqlite3_column_text的调用将会爆炸。