2010-03-07 16 views
2

以下代码(从为每个新的视图中创建一个数据库对象):sqlite3的运行INSERT和UPDATE查询精第一次,但第二次返回错误


-(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 
) 

回答

0

这将有助于您是否显示“断言错误”,也许一个堆栈跟踪,看看什么叫真正失败。

此外,请注意,即使您正在检查错误,但您没有正确执行此操作。即使发生错误,您仍会继续执行sqlite函数。这是一场灾难。

+0

嗨St3fan,谢谢你的回复。这是(编辑成问题)你的意思是? 如何正确检查错误?对不起,我对iPhone编程还很陌生。 感谢您的帮助。 – Marky 2010-03-07 18:04:57

+0

我已经编辑过我的代码,但仍然有问题。我添加了一个新问题,我该如何删除这个问题? 谢谢 – Marky 2010-03-07 19:59:04

+0

我会建议看看你的其他问题(也许接受某个地方的答案,你还没有接受) – KevinDTimm 2010-03-09 13:37:31

相关问题