【问题标题】:How to call sqlite3_errmsg to know why sqlite3_prepare_v2 is failing如何调用 sqlite3_errmsg 以了解 sqlite3_prepare_v2 失败的原因
【发布时间】:2014-08-24 03:57:14
【问题描述】:

基于 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;

}

【问题讨论】:

    标签: ios objective-c xcode sqlite


    【解决方案1】:

    您可以使用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 Error Messages

    【讨论】:

    • 请注意 sqlite3_errstr() 在 SQLite v 3.7.15 之前不可用,因此在 iOS7.x 中不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 2011-01-09
    • 2014-05-05
    • 2013-10-05
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多