====== Eine Datenbankverbindung öffnen ======
Der erste Schritt um eine Datenbank im Programm nutzen zu können besteht darin, eine Datenbankverbindung zu öffnen. Um SQLite nutzen zu können, muss die Headerdatei sqlite3.h per #include eingebunden werden und die libsqlite3 zum Programm [[dbs:sqlite:libsqlite3:install|gelinkt]] werden.
===== Code für C: =====
#include
#include
int main()
{
sqlite3* dbs;
char path[100];
char *ptr_path = path;
printf("Verzeichnis zur Datenbank eingeben:\n");
scanf("%s",path);
if (sqlite3_open(ptr_path,&dbs) != SQLITE_OK)
{
printf("Beim Oeffnen ist ein Fehler aufgetreten: %s\n",sqlite3_errmsg(dbs));
sqlite3_close(dbs);
}
printf("Oeffnen der Datenbankverbindung war erfolgreich!");
sqlite3_close(dbs);
printf("Datenbankverbindung geschlossen!\n");
return 0;
}
===== Code für C++: =====
#include
#include
#include
using namespace std;
int main()
{
sqlite3* dbs;
string path;
cout << "Verzeichnis zur Datenbank eingeben:";
cin >> path;
cout << endl;
if (sqlite3_open(path.c_str(),&dbs) != SQLITE_OK)
{
cout << "Beim Oeffnen ist ein Fehler aufgetreten"
<< sqlite3_errmsg(dbs) << endl;
sqlite3_close(dbs);
}
cout << "Oeffnen der Datenbankverbindung war erfolgreich!"
<< endl;
sqlite3_close(dbs);
cout << "Datenbankverbindung geschlossen" << endl;
return 0;
}
===== Erklärung: =====
Was passiert hier eigentlich?
sqlite3* dbs;
Hier wird ein Pointer für ein [[dbs:sqlite:libsqlite3:ref:sqlite3|sqlite3]] Objekt erzeugt. Er soll später die Adresse der Instanz unseres Datenbankobjektes aufnehmen und wird von den meisten SQLite3-Funktionen als Argument erwartet.\\
sqlite3_open(path.c_str(),&dbs)
Mit [[dbs:sqlite:libsqlite3:ref:sqlite3_open|sqlite3_open()]] wird ein Pointer auf eine Instanz des SQLite3-Objekts gerichtet. Er repräsentiert das Datenbankobjekt. Als erstes Argument erwartet die Funktion einen Pointer auf das erste Zeichen des Chararrays, das den Pfad enthält. Im Pointer, der als zweites Argument übergeben wird, wird die Adresse unser Datenbankinstanz geschrieben. Schlägt die Erzeugung der Instanz fehl, wird NULL in den Pointer geschrieben. Die Funktion liefert die Konstante SQLITE_OK zurück, wenn die Verbindung erfolgreich war. \\
Es ist auch möglich, eine Datenbank zu erstellen, die lediglich im Arbeitsspeicher besteht. Diese ist nur so lange existent, solange die Datenbankverbindung nicht geschlossen wurde. Um eine solche flüchtige Datenbank zu erstellen, übergibt man statt des Datenbankpfades ":memory:".
sqlite3_errmsg(dbs)
[[dbs:sqlite:libsqlite3:ref:sqlite3_errmsg|sqlite3_errmsg()]] liefert eine englische Fehlermeldung zurück, wenn die Datenbankverbindung fehlschlägt. Die Fehlermeldung wird als const char* zurückgeliefert.\\
Es ist übrigens nicht nötig, vor der Datenbankverbindung eine Datenbank anzulegen. Existiert die angegebene Datenbank nicht, dann wird sie erzeugt. "Datenbank.db" als Eingabe für das obige Programm würde eine gleichnamige Datenbank im lokalen Verzeichnis anlegen.
sqlite3_close(dbs);
Mit [[dbs:sqlite:libsqlite3:ref:sqlite3_close|sqlite3_close()]] schließlich, wird die Datenbankverbindung beendet und die Objektinstanz zerstört.