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 gelinkt werden.

Code für C:

#include <stdio.h>
#include <sqlite3.h>
 
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 <iostream>
#include <string>
#include <sqlite3.h>
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 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 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)

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 sqlite3_close() schließlich, wird die Datenbankverbindung beendet und die Objektinstanz zerstört.