【问题标题】:How do I grab the error code if sqlite3_prepare_v2() returns one?如果 sqlite3_prepare_v2() 返回错误代码,我如何获取错误代码?
【发布时间】:2013-01-30 12:25:31
【问题描述】:

在很大程度上遵循Ray Wenderlich's SQLite tutorial,我正在编写一个相当简单的应用程序,该应用程序显示从服务器下拉的信息。我的 SQLite 查询的基本结构(到本地数据库,而不是服务器)如​​下:

{
    NSMutableArray *list = [[NSMutableArray alloc] init];
    NSString *query = @"SELECT _id, type FROM table ORDER BY type"; // As appropriate.
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(_db, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            // Process the returned values...
            int rowNumber = sqlite3_column_int(statement, 0);

            // Initialize the object.
            // Push the object onto the array.
        }
        sqlite3_finalize(statement);
    } else {
        // Log the error.
    }
    return list;
}

我的问题是,如果 if 语句返回 false,检查错误的最佳方法是什么? 对我来说,最简单的解决方案似乎是将 sqlite3_prepare_v2() 的返回值存储为 @ 987654325@ 并对照SQLITE_OK 检查那个。打电话给sqlite_errmsg()怎么样?

我确实研究了sqlite_exec(),但我没有任何运气尝试编译,而且我对自己理解 C 中的回调以正确维护使用它们的代码没有足够的信心。不过,它传递了一个错误参数,这就是让我首先研究它的原因。

【问题讨论】:

    标签: ios objective-c c error-handling sqlite


    【解决方案1】:

    如果您想收到错误消息,您必须确实调用sqlite3_errmsg

    sqlite3_exec 会给你相同的字符串。

    【讨论】:

    • 所以听起来好像else 块可以简单地包含NSLog(@"Database returned error %d: %s", sqlite3_errcode(_db), sqlite3_errmsg(_db));
    • 是的;尽管如果您也有消息,则错误代码不是很有用(代码中的信息是消息中信息的子集)。
    • 谢谢。还没有机会测试它。
    • 我在客户端应用程序中至少有一个案例,其中消息“不是错误”,没有太大帮助。我建议你也保存并记录结果代码(希望原始程序员在这里这样做)。
    • 因字符串消息“不是错误”而崩溃的代码是: if ( (rc=sqlite3_prepare_v2(database, [queryString UTF8String], -1, &statement, NULL)) != SQLITE_OK) { NSAssert1 (0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 2016-03-15
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2018-07-28
    相关资源
    最近更新 更多