SQL-Kommando ausführen, Ergebnisse auf dem Heap

int sqlite3_get_table(
sqlite3 *db,
const char *zSql,
char ***pazResult,
int *pnRow,
int *pnColumn,
char **pzErrmsg
);
void sqlite3_free_table(char **result);



Diese Funktion kann benutzt werden, um ein oder mehrere SQL-Kommandos auszuführen und die Rückgabewerte auf dem Heap abzulegen. Die Funktion liefert dazu einen Pointer auf den Speicherbereich, sowie die Anzahl der Rückgabezeilen und die Anzahl der Rückgabespalten zurück.

  1. Pointer vom Typ sqlite3
  2. Pointer auf das erste Zeichen eines SQL-Kommandos
  3. Pointer vom Typ char*** auf die Rückgabewerte
  4. Pointer auf eine Variable vom Typ int, für die Anzahl der zurückgelieferten Datenbankzeilen
  5. Pointer auf eine Variable vom Typ int, für die Anzahl der zurückgelieferten Datenbankspalten
  6. Pointer vom Typ char** in den Fehlermeldungen abgelegt werden können. Diese Fehlermeldung muss mit sqlite3_free() freigegeben werden, um kein Speicherleck zu erzeugen.


Das zurückgeliefert Ergebnis muss mit sqlite3_free_table() freigegeben werden, damit kein Speicherleck entsteht

Die Rückgabewerte, befinden sich als 0-terminierte UTF-8 Strings in einen Pointerarray. Hier ein Beispiel, wie die Daten abgelegt werden:

Name Alter
Max 20
Werner 45
Susi 31

Gehen wir von dem diesem SQL-Befehl aus:

 SELECT * FROM Tabelle;

Die Rückgabewert sehen dann wie folgt aus:

  • pnRow hat den Wert 3, da drei Datenbankzeilen vorhanden sind
  • pnColumn hat den Wert 2, da zwei Datenbankspalten vorhanden sind.
  • azResult verwaltet acht Werte. Die Anzahl errechnet sich wie folgt: Zeilenzahl * Spaltenzahl + Spaltenzahl

Diese acht Wert sind folgendermaßen angeordnet:

azResult[0]==„Name“;
azResult[1]==„Alter“;
azResult[2]==„Max“;
azResult[3]==„20“;
azResult[4]==„Werner“;
azResult[5]==„45“;
azResult[6]==„Susi“;
azResult[7]==„31“;