我一直在盯着这段代码。研究替代品但它们似乎不起作用。请告诉我,我已经看了一些东西。
-(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);
}
答案 0 :(得分:0)
你有几个问题;
1)您的sqlite3_bind_int语句中似乎有问题,在文档声明
时传入0作为索引第二个参数是要设置的SQL参数的索引。该 最左边的SQL参数的索引为1.
2)检查sqlite3_step的返回值是否为SQLITE_DONE(这意味着它没有更多行,在这种情况下根本没有行,因为问题1没有设置id)。 sqlite_column_ *仅在返回值为SQLITE_ROW时有效,因此您对sqlite3_column_text的调用将会爆炸。