基于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;
}
答案 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在内部管理,不得被应用程序释放。