SQLite-Datenbankschema überprüfen



  • Hallo zusammen,
    Ich schreibe grade an einer Software, die mit einer SQLite3-Datenbank kommuniziert.
    Ich würde gerne bevor das Programm logisch zu funktionieren anfängt (und Abfragen an die Datenbank schickt) erstmal überprüfen, ob alle dazu nötigen Tabellen existieren und zwar so, wie das Programm sie erwartet. Ich kann das Schema einer SQL-Tabelle abfragen ('SELECT sql FROM sqlite_master etc.'), aber ich finde das irgendwie eine schlechte Lösung. Außerdem ließe sich die selbe Tabelle auch anders erstellen, schon alleine in dem ich den primary key zum Schluss fest lege:

    CREATE TABLE tabelle1 (id INTEGER, primary key (id));
    CREATE TABLE tabelle2 (id INTEGER PRIMARY KEY);
    

    Sind logisch gesehen die selben Tabellen (korrigiert mich bitte, wenn ich falsch liege :)), aber SQLite speichert eben die Strings, die ich eingegeben habe und die sind unterschiedlich.

    Also meine Frage an auch: Wie überprüft ihr das vorliegende Schema eurer (SQLite-)Datenbank (automatisiert... nicht manuell 😉 )? Oder setzt ihr einfach voraus, dass es für die aktuelle Version eures Programmes passend vorliegt? Gibt es vielleicht schon eine SQL-Abfrage, die ich übersehen habe? Oder würdet ihr eine SQL-Datei mit den notwendigen Schemas mitliefern, damit die Datenbank beim ersten Aufruf direkt erstellt werden kann?

    Für ein paar Tipps, wie ihr sowas handhabt, wäre ich dankbar 🙂

    nobody44



  • Hallo,

    ich würde einfach in einer speziellen Tabelle die Versionsnummer der Datenbank speichern. So habe ich anhand der Programmhistorie auf Code-Ebene die erforderlichen Konvertierungsfunktionen für jede Version der Datenbank.

    Z. B.

    Init-Tabelle:
    CREATE TABLE test1(id INT NOT NULL, name VARCHAR(255);
    
    Änderung in Version 0.1 der Datenbank:
    ...
    if dbVersionFromDB < dbVersionCurrent then begin
    ...
      SQL.Add('ALTER TABLE test1 ADD COLUMN lastname');
    ...
    end;
    

    So ähnlich halt (ist aber ausschließlich pseudo-Code.


Anmelden zum Antworten