Einen SQL-Befehl in Bytecode compilieren

int sqlite3_prepare_v2(
sqlite3 *db,
const char *zSql,
int nByte,
sqlite3_stmt **ppStmt,
const char **pzTail
);



Um ein SQL-Kommando per sqlite3_step() ausführen zu können, muss es vorher in Bytecode compiliert werden. Die Funktion erwartet diese Parameter:

  1. Pointer vom Typ Handle für die Datenbankverbindungsqlite3]], der auf eine geöffnete Datenbank zeigt
  2. Pointer vom Typ char, der auf das erste Zeichen eines SQL-Kommandos zeigt
  3. Angabe der maximal einzulesenden Befehlslänge in Byte
  4. Pointer vom Typ sqlite3_stmt. Hier wird das compilierte Statement abgelegt.
  5. Pointer vom Typ char. Diese Funktion kann immer nur einen SQL-Befehl bearbeiten. Werden mehrere Kommandos übergeben, dann zeigt dieser Pointer auf das erste Zeichen der noch nicht bearbeiteten Kommandos. Kommt es bei der Compilierung eines Befehls zu einem Fehler wird dieser Pointer wieder auf NULL gesetzt.

War die Compilierung erfolgreich, dann wird SQLITE_OK zurückgeliefert, ansonsten einer dieser Fehlercodes.

Ist der dritte Parameter kleiner gleich NULL, dann wird der Befehl bis zum ersten NULL-Terminierungszeichen eingelesen. Ist der Wert positiv, dann gibt es die Länge in Byte an, die maximal eingelesen werden soll.

Ein solches prepared statement wie es diese Funktion zurückliefert, muss per sqlite3_finalize() zerstört werden, um Speicherlecks zu vermeiden.

Diese Funktion existiert noch in drei weiteren Varianten. Zwei davon sind für UTF-16 codierte Strings gedacht:

  • sqlite3_prepare ist veraltet und nur noch aus Gründen der Abwärtskompatibilität vorhanden
  • sqlite3_prepare16_v2 für UTF-16 codierte Strings
  • sqlite3_prepare16 ist die veraltete Version für UTF⁻16 codierte Strings