如何调用sqlite3_errmsg来了解sqlite3_prepare_v2失败的原因

时间:2014-07-03 06:45:23

标签: ios objective-c xcode sqlite

基于C的函数sqlite3_prepare_v2正在返回1.我只想知道可读形式的错误消息并更正我的代码。我正在学习这个作为raywinderlich博客的教程。我遇到了sqlite3_errmsg,我不知道如何使用sqlite3_errmsg函数。

尽管已经提出了同样的问题here,但遗憾的是仍然没有答案。

我想知道错误和纠正将非常感激。感谢。

- (NSArray *)failedBankInfos {
    NSMutableArray *retval = [[NSMutableArray alloc]init];
    NSString *query = @"SELECT id, name, city, state FROM failed_banks ORDER BY close_date DESC";
    sqlite3_stmt *statement;
    int tmp  = sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil);
    NSLog(@"%i",tmp); // printing 1
    if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil)
        == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            int uniqueId = sqlite3_column_int(statement, 0);
            char *nameChars = (char *) sqlite3_column_text(statement, 1);
            char *cityChars = (char *) sqlite3_column_text(statement, 2);
            char *stateChars = (char *) sqlite3_column_text(statement, 3);

            NSString *name = [[NSString alloc] initWithUTF8String:nameChars];
            NSString *city = [[NSString alloc] initWithUTF8String:cityChars];
            NSString *state = [[NSString alloc] initWithUTF8String:stateChars];
            NSLog(@"name is  : %@",name);
             NSLog(@"city is : %@",city);
            FailedBankInfo *info = [[FailedBankInfo alloc]
                                    initWithUniqueId:uniqueId name:name city:city state:state];
            [retval addObject:info];
        }
        sqlite3_finalize(statement);
    }
    else
    {
        // if part is failing and control is arriving in else.
    }
    return retval;

}

1 个答案:

答案 0 :(得分:5)

您可以使用sqlite3_errmsg()之类的:

NSLog(@"Database Error Message : %s", sqlite3_errmsg(_database));

您也可以使用sqlite3_errstr()

  

sqlite3_errmsg()和sqlite3_errmsg16()返回英文   描述错误的文本,分别为UTF-8或UTF-16。   保存错误消息字符串的内存在内部进行管理。该   应用程序不需要担心释放结果。然而,   错误字符串可能会被后续覆盖或取消分配   调用其他SQLite接口函数。

     

sqlite3_errstr()接口返回该语言的英文文本   将结果代码描述为UTF-8。用于保存错误消息的内存   string在内部管理,不得被应用程序释放。

参考SQLite Error Messages