se utiliza la función sqlite3_finalize()
cuando esté completamente terminado con una declaración, ya sea porque usted hizo una consulta de una sola vez como la siguiente:
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);
o si ha terminado con una declaración preparada que' Nunca más lo necesitaré (posiblemente porque está limpiando al salir de la aplicación).
Si ha creado una declaración que desea usar una y otra vez (por motivos de rendimiento, porque es razonablemente costoso preparar una declaración), use sqlite3_reset()
para restablecer la consulta de modo que esté lista para usar de nuevo. No desea finalizar en ese caso hasta que haya decidido que no querrá volver a utilizar esa declaración (de nuevo, generalmente esto ocurre durante el desmontaje de su aplicación o un objeto en particular).
Un ejemplo de una consulta que sólo se restablece la declaración al final es la siguiente:
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);
si en el bloque de código anterior tenemos una segunda consulta SQL, ¿todavía llamar a finalizar (declaración) antes sqlite3_prepare_v2() en query2 y luego call finalize (statement) nuevamente después de pasar a través de statement con query2? O si tengo un método que sondee un servidor cada 5 segundos y guarde los resultados en la base de datos, ¿dejaría de lado la declaración de finalización dentro de este método por razones de rendimiento o esto no se consideraría "reutilización"? – Zhang