SQLite speichert Daten in einer lokalen Datei. SQL ist die Sprache für Tabellen und Abfragen. Drift bietet in Dart eine typisierte Datenbankschicht und beobachtbare Abfragen. Wir beginnen darunter mit SQL, damit du weißt, was tatsächlich gespeichert wird. Das Lernschema ist kleiner als das echte Fahrzeugakte-Schema und darf nicht als Migration in die App kopiert werden.
01Eine getrennte Lerndatenbank erstellen
Installiere die SQLite-Kommandozeile und führe sqlite3 tutorial.sqlite < schema.sql aus. Verwende eine neue Datei. PRAGMA foreign_keys aktiviert die Prüfung von Beziehungen für diese Verbindung.
PRAGMA foreign_keys = ON;
CREATE TABLE vehicles (id TEXT PRIMARY KEY, name TEXT NOT NULL);
CREATE TABLE entries (
id TEXT PRIMARY KEY,
vehicle_id TEXT NOT NULL REFERENCES vehicles(id),
activity TEXT NOT NULL,
cost_cents INTEGER NOT NULL CHECK (cost_cents >= 0)
);
BEGIN;
INSERT INTO vehicles VALUES ('v1', 'Family car');
INSERT INTO entries VALUES ('e1', 'v1', 'Service', 12990);
COMMIT;
SELECT v.name, e.activity, e.cost_cents
FROM entries e JOIN vehicles v ON v.id = e.vehicle_id;
Starten / prüfen
sqlite3 tutorial.sqlite < schema.sql02Tabellen und Beziehungen lesen
PRIMARY KEY macht eine ID eindeutig. NOT NULL verbietet fehlende Werte. vehicle_id verweist auf vehicles. Der FOREIGN KEY verhindert einen Eintrag für ein nicht vorhandenes Fahrzeug. CHECK schützt unseren nicht negativen Centbetrag.
03Gemeinsam schreiben und abfragen
BEGIN und COMMIT umschließen die zwei INSERTs. JOIN verbindet Fahrzeug und Eintrag für die Anzeige. Bei Fehlern muss die Anwendung die Transaktion zurückrollen. Parametrisierte Abfragen binden Werte getrennt vom SQL-Code.
04Drift und Schemaänderungen verstehen
In Fahrzeugakte definiert app_database.dart Tabellen, Schema-Version und Migrationen. Ein Drift-Stream aktualisiert die Oberfläche bei geänderten Daten. Eine neue App-Version muss bestehende Daten behalten. Deshalb benötigt jede Schemaänderung einen geprüften Migrationsweg.
Die Abfrage zeigt Family car, Service und 12990. Die Datei bleibt nach Programmende erhalten.
Deine Übung
Füge in einer neuen SQL-Sitzung einen Eintrag mit vehicle_id missing ein. Was muss vorher aktiviert werden?
Lösung mit Erklärung anzeigen
Aktiviere PRAGMA foreign_keys = ON in jeder neuen Verbindung. Danach schlägt der INSERT fehl. Die Einstellung ist verbindungsbezogen. Die reale Datenbankinitialisierung muss sie deshalb verlässlich setzen.
Projektbezug und Quellen
Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.