← Flutter / Dart

Flutter / Dart · 13 / 18

SQL verstehen und Drift/SQLite einordnen

Du erstellst Tabellen, verknüpfst Einträge und verstehst Transaktionen und Migrationen.

  • Mittel
  • Fortgeschritten
  • 45 min

Voraussetzungen: Clean MVVM, Services und Repositories

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.

Beispieldateien

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.

schema.sql · sqlDatei öffnen
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.sql

02Tabellen 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.

Erwartetes Ergebnis

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.