Was ist SQLite und warum braucht man es in C++?
SQLite ist eine leichte, eingebettete relationale Datenbank, die keinen separaten Serverprozess benötigt. Im Gegensatz zu MySQL oder PostgreSQL arbeitet SQLite direkt mit einer Datenbankdatei auf der Festplatte. Das macht es zur idealen Wahl für Desktop-Anwendungen, mobile Geräte, eingebettete Systeme und kleinere Webprojekte.
Für die Programmiersprache C++ gibt es mehrere Wege, mit SQLite zu arbeiten. Die beliebteste und stabilste Methode ist die Nutzung der offiziellen sqlite3-Bibliothek (C-API), die als Sammlung von C-Funktionen bereitgestellt wird. Für mehr Komfort in C++ werden jedoch oft Wrapper wie SQLiteCpp oder sqlite_modern_cpp verwendet. In diesem Artikel konzentrieren wir uns auf die direkte Nutzung der C-API (sqlite3-Bibliothek), da dies maximale Kontrolle und ein tiefes Verständnis der Abläufe ermöglicht.
Die wichtigsten Vorteile von SQLite:
- Null Konfiguration: Kein Server-Setup oder -Administration nötig.
- Portabilität: Die gesamte Datenbank ist eine einzige Datei.
- Zuverlässigkeit: Volle Transaktionsunterstützung (ACID).
- Geschwindigkeit: Für die meisten Operationen schneller als Client-Server-Datenbanken.
- Größe: Die Bibliothek belegt weniger als 600 KB.
SQLite für C++ installieren
Die Installation hängt von Ihrem Betriebssystem und Compiler ab. Wir zeigen die drei gängigsten Methoden.
1. Installation über den Paketmanager (Linux/macOS)
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install libsqlite3-dev
macOS (Homebrew):
brew install sqlite3
Fedora:
sudo dnf install sqlite-devel
2. Installation unter Windows (vcpkg)
Wenn Sie vcpkg verwenden:
vcpkg install sqlite3:x64-windows
vcpkg integrate install
Danach können Sie in Visual Studio #include <sqlite3.h> einbinden.
3. Kompilieren aus den Quellen (universelle Methode)
Laden Sie die Dateien sqlite3.c und sqlite3.h von der offiziellen Webseite sqlite.org herunter. Fügen Sie sie dann einfach zu Ihrem Projekt hinzu:
g++ main.cpp sqlite3.c -o myapp -lpthread -ldl
Unter Windows müssen Sie möglicherweise zusätzlich -lws2_32 angeben.
Schnellstart: Ihr erstes SQLite-Programm in C++
Wir erstellen eine einfache Konsolenanwendung, die eine Datenbank öffnet, eine Tabelle anlegt und einen Datensatz einfügt.
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3 *db;
char *errMsg = 0;
// 1. Datenbank öffnen (oder erstellen)
int rc = sqlite3_open("test.db", &db);
if (rc) {
std::cerr << "Fehler beim Öffnen der DB: " << sqlite3_errmsg(db) << std::endl;
return 1;
}
// 2. Tabelle erstellen
const char *sqlCreate = "CREATE TABLE IF NOT EXISTS users ("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name TEXT NOT NULL, "
"age INTEGER);";
rc = sqlite3_exec(db, sqlCreate, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
std::cerr << "SQL-Fehler: " << errMsg << std::endl;
sqlite3_free(errMsg);
sqlite3_close(db);
return 1;
}
// 3. Daten einfügen
const char *sqlInsert = "INSERT INTO users (name, age) VALUES ('Alice', 30);";
rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
std::cerr << "Fehler beim Einfügen: " << errMsg << std::endl;
sqlite3_free(errMsg);
} else {
std::cout << "Datensatz hinzugefügt, ID: " << sqlite3_last_insert_rowid(db) << std