ios - sqlite iphone读取数据的最佳实践

标签 ios iphone sqlite

我正在尝试制作一个从 SQLite3 数据库读取的应用程序。我计划在开发期间预加载数据,因此应用程序不需要修改数据库中的任何内容,只需从中读取、进行查询等。

单独读取数据的最佳做法是什么?我应该在每次查询时打开数据库、读取数据然后关闭它吗?该应用程序将进行许多小查询和一些大查询。在应用程序运行期间打开数据库,还是在每次提取时打开/关闭数据库更好?

最佳答案

阅读:

<强>1。对于查询,重用编译语句很重要。
2. 确保使用参数,以便重新使用那些已编译的查询

当您调用 sqlite3_prepare_v2 时,它会编译该语句并为您返回对该语句的引用。找到一种方法来保存它并重新使用它。 *语句见下面的代码。您将 &statement 传递给 prepare。

另外,请注意 ?参数。如果您要重新使用该语句,请务必再次调用该语句的 sqlite3_reset(),重新绑定(bind)程序的输入(参数)并再次执行。

sqlite3_stmt    *statement;
NSString *querySQL = @"update contacts set name=?,address=?,phone=? where id=?";
NSLog(@"query: %@", querySQL);
const char *query_stmt = [querySQL UTF8String];

// preparing a query compiles the query so it can be re-used.
// find a way to save off the *statement so you can re-use it.
sqlite3_prepare_v2(_contactDb, query_stmt, -1, &statement, NULL);  

// use sqlite3_bind_xxx functions to bind in order values to the params   
sqlite3_bind_text(statement, 1, [[contact name] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(statement, 2, [[contact address] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(statement, 3, [[contact phone] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_int64(statement, 4, [[contact id] longLongValue]);

始终检查返回码!并记录或处理错误。

    rc = sqlite3_step(stmt);
    switch (rc)
    {
        case SQLITE_ROW:
            // ...
            break;

        case SQLITE_OK:
        case SQLITE_DONE:
            break;

        default:
            // ....
            }

            return NO;
    }

如果您遇到错误,请记录或获取错误消息以提供更多信息:

- (NSString*)errorMessage
{
    return [NSString stringWithCString:sqlite3_errmsg(_sqlite3) encoding:NSUTF8StringEncoding];    
}

关于ios - sqlite iphone读取数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549281/

相关文章:

ios - 从导航栏中的栏按钮项到另一个 View Controller 的 Segue 不会运行我的代码?

iphone - 在 Objective-C 中搜索字符串的最快方法是什么?

iphone - 在 OSX 10.6 中以编程方式与连接的 iOS/iPod 进行交互

iphone - 在后台接收 iOS 通知::本地通知

java - Android Studio 将数据保存到数据库中

android - LG手机无法访问SqLite数据库

iphone - UINavigationController 问题

ios - 如何在自定义相机中添加 subview ?

iphone - 推送 View Controller 时无法设置 uiimageview 的图像

android - 违反延迟外键约束的事务未结束