NAME
sqlite3_step —
Evaluate An SQL
Statement
SYNOPSIS
int
sqlite3_step(
sqlite3_stmt*);
DESCRIPTION
After a prepared statement has been prepared using either sqlite3_prepare_v2()
or sqlite3_prepare16_v2() or one of the legacy interfaces sqlite3_prepare() or
sqlite3_prepare16(), this function must be called one or more times to
evaluate the statement.
The details of the behavior of the sqlite3_step() interface depend on whether
the statement was prepared using the newer "v2" interface
sqlite3_prepare_v2() and sqlite3_prepare16_v2() or the older legacy interface
sqlite3_prepare() and sqlite3_prepare16(). The use of the new "v2"
interface is recommended for new applications but the legacy interface will
continue to be supported.
In the legacy interface, the return value will be either SQLITE_BUSY,
SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE. With the
"v2" interface, any of the other result codes or extended result
codes might be returned as well.
SQLITE_BUSY means that the database engine was unable to acquire the database
locks it needs to do its job. If the statement is a COMMIT or occurs outside
of an explicit transaction, then you can retry the statement. If the statement
is not a COMMIT and occurs within an explicit transaction then you should
rollback the transaction before continuing.
SQLITE_DONE means that the statement has finished executing successfully.
sqlite3_step() should not be called again on this virtual machine without
first calling sqlite3_reset() to reset the virtual machine back to its initial
state.
If the SQL statement being executed returns any data, then SQLITE_ROW is
returned each time a new row of data is ready for processing by the caller.
The values may be accessed using the column access functions. sqlite3_step()
is called again to retrieve the next row of data.
SQLITE_ERROR means that a run-time error (such as a constraint violation) has
occurred. sqlite3_step() should not be called again on the VM. More
information may be found by calling sqlite3_errmsg(). With the legacy
interface, a more specific error code (for example, SQLITE_INTERRUPT,
SQLITE_SCHEMA, SQLITE_CORRUPT, and so forth) can be obtained by calling
sqlite3_reset() on the prepared statement. In the "v2" interface,
the more specific error code is returned directly by sqlite3_step().
SQLITE_MISUSE means that the this routine was called inappropriately. Perhaps it
was called on a prepared statement that has already been finalized or on one
that had previously returned SQLITE_ERROR or SQLITE_DONE. Or it could be the
case that the same database connection is being used by two or more threads at
the same moment in time.
For all versions of SQLite up to and including 3.6.23.1, a call to
sqlite3_reset() was required after sqlite3_step() returned anything other than
SQLITE_ROW before any subsequent invocation of sqlite3_step(). Failure to
reset the prepared statement using sqlite3_reset() would result in an
SQLITE_MISUSE return from sqlite3_step(). But after version 3.6.23.1
(dateof:3.6.23.1, sqlite3_step() began calling sqlite3_reset() automatically
in this circumstance rather than returning SQLITE_MISUSE. This is not
considered a compatibility break because any application that ever receives an
SQLITE_MISUSE error is broken by definition. The SQLITE_OMIT_AUTORESET
compile-time option can be used to restore the legacy behavior.
Goofy Interface Alert: In the legacy interface, the sqlite3_step() API
always returns a generic error code, SQLITE_ERROR, following any error other
than SQLITE_BUSY and SQLITE_MISUSE. You must call sqlite3_reset() or
sqlite3_finalize() in order to find one of the specific error codes that
better describes the error. We admit that this is a goofy design. The problem
has been fixed with the "v2" interface. If you prepare all of your
SQL statements using either sqlite3_prepare_v2() or sqlite3_prepare16_v2()
instead of the legacy sqlite3_prepare() and sqlite3_prepare16() interfaces,
then the more specific error codes are returned directly by sqlite3_step().
The use of the "v2" interface is recommended.
SEE ALSO
sqlite3_column_blob(3),
sqlite3_stmt(3),
sqlite3_errcode(3),
sqlite3_finalize(3),
sqlite3_prepare(3),
sqlite3_reset(3),
SQLITE_OK(3)