Iphone 在iOS中何时在sqlite中完成finalize语句?

Iphone 在iOS中何时在sqlite中完成finalize语句?,iphone,ios,ipad,sqlite,Iphone,Ios,Ipad,Sqlite,在iOS中使用sqlite时,何时执行finalize语句 我是否需要在每次查询后完成语句 重置和最终确定之间有什么区别 如果我重置了,我需要完成吗 谢谢。当您完成一条语句时,您可以使用sqlite3\u finalize()函数,这可能是因为您执行了如下一次性查询: const char *sql = "SELECT COUNT(*) FROM bonds WHERE molecule=? AND structure=?"; sqlite3_stmt *bondCountingStatemen

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

我是否需要在每次查询后完成语句

重置和最终确定之间有什么区别

如果我重置了,我需要完成吗


谢谢。

当您完成一条语句时,您可以使用
sqlite3\u 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\u 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);

如果在上面的代码块中我们有第二个SQL查询,我们是否仍然在query2上的sqlite3\u prepare\u v2()之前调用finalize(语句),然后在使用query2单步执行语句之后再次调用finalize(语句)?或者,如果我有一个每5秒轮询一个服务器并将结果存储到数据库中的方法,出于性能原因,我是否会在该方法中省略finalize语句,或者这不被视为“重用”?