Iphone sqlite3第一次很好地运行INSERT和UPDATE查询,但第二次返回错误

Iphone sqlite3第一次很好地运行INSERT和UPDATE查询,但第二次返回错误,iphone,sqlite,Iphone,Sqlite,以下代码来自为每个新视图创建的数据库对象: -(void)update:(NSString *)queryText{ NSLog(queryText); char *errorMsg; if (sqlite3_prepare_v2(database, [queryText UTF8String], -1, &statement, nil) == SQLITE_OK) { } else { NSLog(@"HMM, COULDNT RUN QUE

以下代码来自为每个新视图创建的数据库对象:


-(void)update:(NSString *)queryText{
    NSLog(queryText);
    char *errorMsg;

    if (sqlite3_prepare_v2(database, [queryText UTF8String], -1, &statement, nil) == SQLITE_OK) {
    } else {
        NSLog(@"HMM, COULDNT RUN QUERY: %s\n", sqlite3_errmsg(database));  
    }
    if (sqlite3_step(statement) != SQLITE_DONE){
        NSAssert1(0, @"Error updating table: %s", errorMsg); 
    }
    sqlite3_finalize(statement);
    NSLog(@"Update saved");
}
-(void)insert_answer:(int)obj_id question_type:(NSString *)question_type score:(int)score{
    char *errorMsg;
    char *update = "INSERT INTO Answers (obj_id, question_type, score, date) VALUES (?, ?, ?, DATE())";
    //sqlite3_stmt *stmt;
    if (sqlite3_prepare_v2(database, update, -1, &statement, nil) == SQLITE_OK) { 
        sqlite3_bind_int(statement, 1, obj_id);
        sqlite3_bind_text(statement, 2, [question_type UTF8String], -1, NULL);
        sqlite3_bind_int(statement, 3, score);
    } 
    if (sqlite3_step(statement) != SQLITE_DONE){
        NSAssert1(0, @"Error inserting: %s", errorMsg); 
    }
    sqlite3_finalize(statement);
    NSLog(@"Answer saved");
}
由我的应用程序从以下代码调用:


    [db insert_answer:[[dict_question objectForKey:@"JISDec"] intValue] question_type:@"kanji_meaning" score:arc4random() % 100];
    //
    //update EF, Next_question, n here
    //
    [db update:[NSString stringWithFormat:@"UPDATE Kanji SET EF = %d WHERE Kanji = '%@'", [[dict_question objectForKey:@"EF"] intValue] + 2, [dict_question objectForKey:@"question"]]];
    [db update:[NSString stringWithFormat:@"UPDATE Kanji SET Next_Question = %d WHERE Kanji = '%@'", 1, [dict_question objectForKey:@"question"]]];
    [db update:[NSString stringWithFormat:@"UPDATE Kanji SET n = %d WHERE Kanji = '%@'", [[dict_question objectForKey:@"n"] intValue] + 1, [dict_question objectForKey:@"question"]]];
第一次在我的应用程序中回答问题时运行良好,但下一次加载新视图后,它返回断言错误并崩溃

有人知道为什么吗???我在另一个应用程序中有几乎完全相同的代码,它没有问题

非常感谢

编辑:添加堆栈:


2010-03-08 03:01:12.107 Kanji[33864:207] *** Assertion failure in -[databaseConnection update:], /Volumes/Xcode/Kanji/Classes/../databaseConnection.m:58
2010-03-08 03:01:12.108 Kanji[33864:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error updating table: (null)'
2010-03-08 03:01:12.109 Kanji Training with Watanabe Sensei[33864:207] Stack: (
    30135387,
    2561586441,
    30219323,
    814852,
    37730,
    18074,
    2757637,
    3165006,
    3173743,
    3168955,
    2862559,
    2770888,
    2797665,
    37424473,
    29920128,
    29916232,
    37418517,
    37418714,
    2801583
)


如果您能显示“assert error”和stacktrace来查看实际失败的调用,这会有所帮助


此外,请注意,即使您正在检查错误,您也没有正确执行。即使发生错误,也要继续执行sqlite函数。这是造成灾难的原因。

如果您能显示“assert error”(断言错误)和stacktrace(堆栈跟踪)来查看实际失败的调用,这会有所帮助


此外,请注意,即使您正在检查错误,您也没有正确执行。即使发生错误,也要继续执行sqlite函数。这是灾难的秘诀。

嗨,St3fan,谢谢你的回复。你的意思是什么?我应该如何正确地检查错误?对不起,我对iPhone编程还是很陌生。谢谢你的帮助。我已经编辑了我的代码,但仍然有问题。我添加了一个新问题,如何删除此问题?谢谢,我建议你看看你的其他问题,也许在某个地方接受一个答案,你还没有接受任何yetHi St3fan,谢谢你的回答。你的意思是什么?我应该如何正确地检查错误?对不起,我对iPhone编程还是很陌生。谢谢你的帮助。我已经编辑了我的代码,但仍然有问题。我添加了一个新问题,如何删除此问题?谢谢,我建议你看看你的其他问题,也许在你还没有接受答案的地方接受答案