2011-05-11 10 views

Respuesta

11

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); 
+0

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

Cuestiones relacionadas