A statement is constructed with a function such as sqlite3_prepare_v2().
A prepared statement object must be cleaned up with sqlite3_finalize(). Do not forget this in case of an error.
If parameters are used, set their values with the sqlite3_bind_xxx() functions.
The actual execution happens when sqlite3_step() is called.
const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
sqlite3_bind_int (stmt, 1, 42); /* ID */
sqlite3_bind_text(stmt, 2, "Bob", -1, SQLITE_TRANSIENT); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;