什么时候在iOS中的sqlite中做finalize语句?

时间:2011-05-11 08:41:05

标签: iphone ios ipad sqlite

在iOS中使用sqlite时,何时执行finalize语句?

我是否需要在每次查询后完成声明?

重置和终结有什么区别?

如果我重置,我是否需要最终确定?

感谢。

1 个答案:

答案 0 :(得分:11)

完成语句后,您可以使用sqlite3_finalize()函数,因为您执行了以下一次性查询:

const char *sql = "SELECT COUNT(*) FROM bonds WHERE molecule=? AND structure=?";
sqlite3_stmt *bondCountingStatement;

unsigned int totalBondCount = 0;

if (sqlite3_prepare_v2(database, sql, -1, &bondCountingStatement, NULL) == SQLITE_OK) 
{
    sqlite3_bind_int(bondCountingStatement, 1, databaseKey);
    sqlite3_bind_int(bondCountingStatement, 2, numberOfStructureBeingDisplayed);

    if (sqlite3_step(bondCountingStatement) == SQLITE_ROW)
    {
        totalBondCount =  sqlite3_column_int(bondCountingStatement, 0);
    }
    else
    {
    }
}
sqlite3_finalize(bondCountingStatement);

或者如果您已完成准备好的声明,您将永远不再需要(可能是因为您在退出应用程序时正在清理)。

如果您创建了一个您想要反复使用的声明(出于性能原因,因为准备声明的成本相当昂贵),您可以使用sqlite3_reset()重置查询,以便它可以再次使用。在您决定永远不想重复使用该声明之前,您不想在这种情况下最终确定(再次,通常这是在您的应用程序或特定对象的拆解期间)。

仅在最后重置语句的查询示例如下:

sqlite3_bind_text(insertMoleculeSQLStatement, 1, [filename UTF8String], -1, SQLITE_TRANSIENT);
int success = sqlite3_step(insertMoleculeSQLStatement);

// Because we want to reuse the statement, we reset it instead of finalizing it.
sqlite3_reset(insertMoleculeSQLStatement);