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

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

虽然这里已经提出了同样的问题,但遗憾的是仍然没有答案。

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

 - (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; } 

您可以使用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。 用于保存错误消息字符串的内存在内部进行管理,不得由应用程序释放。

参考SQLite错误消息