Codeschnipsel für C
sqlite3* dbs; char command[300]; char* ptr_command = command; char* error_get_table=NULL; char** result=NULL; int column=0; int row=0; printf("SQL Kommando eingeben"); fgets(ptr_command,300,stdin); if (sqlite3_get_table(dbs,ptr_command,&result,&row,&column,&error_get_table)) { printf("SQLite Fehler: %s",error_get_table); sqlite3_free(error_get_table); error_get_table=NULL; } print_result(result,row,column); sqlite3_free_table(result); result=NULL;
Ausgabefunktion:
int print_result(char** result,int column,int row) { int couter=row*column+row; int i; for (i=0;i!=couter;i++) { printf("%s\n",result[i]); } return 0; }
Codeschnipsel für C++
sqlite3* dbs; string command; char* error_get_table=NULL; char** result=NULL; int column=0; int row=0; cout << "SQL Kommando eingeben: "; getline(cin,command); if (sqlite3_get_table(dbs,command.c_str(),&result,&row,&column,&error_get_table)) { cerr << "SQLite Fehler: " << error_get_table << endl; sqlite3_free(error_get_table); error_get_table=NULL; } print_result(result,row,column); sqlite3_free_table(result); resulte=NULL; }
Ausgabefunktion:
int print_result(char** result,const int &column,const int &row) { int couter=row*column+row; for (int i=0;i!=couter;i++) { cout << result[i] << endl; } return 0; }
Die Funktion sqlite3_get_table() arbeitet im Prinzip ziemlich ähnlich wie sqlite3_exec(). Der Unterschied besteht darin, wie die Funktionen ihre Werte zurückliefern. Während sqlite3_exec() eine Funktion erwartet, die die Daten auswertet, legt sqlite3_get_table() die Werte auf dem Heap ab und liefert einen Zeiger darauf zurück. Die Anzahl der Spalten und Zeilen werden in zwei separate Integervariablen geschrieben. Hier erst einmal die betreffende Codezeile:
sqlite3_get_table(dbs,ptr_command,&result,&row,&column,&error_get_table
Die Funktion erwartet die folgenden Parameter:
Um kein Speicherleck zu erzeugen, müssen sowohl die Fehlermeldungen, als auch die Rückgabewerte explizit freigegeben werden. Für die Fehlermeldungen geschieht das über die Funktion sqlite3_free(). Die Rückgabewerte werden über sqlite3_free_table() freigegeben.
Wie werden die Werte im Array abgelegt? Gehen wir von der folgenden Tabelle aus:
Name | Vorname |
---|---|
Mayer | Franz |
Huber | Karl |
Mueller | Werner |
Im Array würden sie wie folgt liegen:
Result[0] = „Name“;
Result[1] = „Vorname“;
Result[2] = „Mayer“;
Result[3] = „Franz“;
Result[4] = „Huber“;
Result[5] = „Karl“;
Result[6] = „Mueller“;
Result[7] = „Werner“;
Die obige Rückgabefunktion errechnet eigentlich nur die Anzahl der Werte und gibt sie dann der Reihe nach in einer for-Schleife aus.