sqlite
sqlite3_stmt: voorbereide verklaring (C API)
Zoeken…
Opmerkingen
officiële documentatie: Opgesteld Statement Object
Een verklaring uitvoeren
Een instructie is opgebouwd met een functie zoals sqlite3_prepare_v2 () .
Een voorbereid instructieobject moet worden opgeruimd met sqlite3_finalize () . Vergeet dit niet in geval van een fout.
Als parameters worden gebruikt, stelt u hun waarden in met de functies sqlite3_bind_xxx () .
De daadwerkelijke uitvoering gebeurt wanneer sqlite3_step () wordt aangeroepen.
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 */;
Gegevens lezen van een cursor
Een SELECT-query wordt uitgevoerd zoals elke andere instructie. Roep sqlite3_step () op in een lus om de geretourneerde gegevens te lezen. Het keert terug:
- SQLITE_ROW: als de gegevens voor de volgende rij beschikbaar zijn, of
- SQLITE_DONE: als er geen rijen meer zijn, of
- elke foutcode.
Als een query geen rijen retourneert, retourneert de allereerste stap SQLITE_DONE.
Roep de functies sqlite3_column_xxx () aan om de gegevens van de huidige rij te lezen:
const char *sql = "SELECT ID, Name FROM MyTable";
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 */;
}
for (;;) {
err = sqlite3_step(stmt);
if (err != SQLITE_ROW)
break;
int id = sqlite3_column_int (stmt, 0);
const char *name = sqlite3_column_text(stmt, 1);
if (name == NULL)
name = "(NULL)";
printf("ID: %d, Name: %s\n", id, name);
}
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;
Meerdere keren een voorbereide verklaring uitvoeren
Nadat een instructie is uitgevoerd , brengt een aanroep naar sqlite3_reset () deze terug in de oorspronkelijke staat zodat deze opnieuw kan worden uitgevoerd.
Typisch, terwijl de instructie zelf hetzelfde blijft, worden de parameters gewijzigd:
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 */;
}
for (...) {
sqlite3_bind_int (stmt, 1, ...); /* ID */
sqlite3_bind_text(stmt, 2, ...); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);
return /* success */;