Note that neither an explicit nor automatic reset clears any bindings that you have made against the statement as these are not part of the "execution state" but are a separate construct associated with the statement itself (though there is a call to reset the bindings (sqlite3_clear_bindings) which will clear the bindings data associated with a statement context). It is not necessary to re-bind unchanged bindings to a statement context as this data is not modified by the execution state of the statement itself. sqlite3_finalize operates on a statement context and does a reset, clears the bindings, then free's the various memory structures associated with a statement and destroys the statement context.