sqlite
sqlite3_stmt: Prepared Statement (C API)
Sök…
Anmärkningar
officiell dokumentation: Förberedt uttalandeobjekt
Utföra ett uttalande
Ett uttalande är konstruerat med en funktion som sqlite3_prepare_v2 () .
Ett förberett uttalandeobjekt måste städas upp med sqlite3_finalize () . Glöm inte detta i händelse av ett fel.
Om parametrar används anger du värdena med funktionerna sqlite3_bind_xxx () .
Den faktiska exekveringen sker när sqlite3_step () anropas.
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 */;
Läsa data från en markör
En SELECT-fråga körs som alla andra uttalanden. För att läsa de returnerade uppgifterna, ring sqlite3_step () i en slinga. Det returnerar:
- SQLITE_ROW: om data för nästa rad är tillgänglig, eller
- SQLITE_DONE: om det inte finns fler rader, eller
- alla felkoder.
Om en fråga inte returnerar några rader returnerar det allra första steget SQLITE_DONE.
För att läsa data från den aktuella raden, ring funktionerna sqlite3_column_xxx () :
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 */;
Utför ett förberett uttalande flera gånger
Efter att ett uttalande har utförts kommer ett anrop till sqlite3_reset () tillbaka till det ursprungliga tillståndet så att det kan köras igen.
Normalt ändras parametrarna medan påståendet i sig förblir detsamma:
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 */;