Tabellenstruktur einer SQlite Datenbank ändern - Hinzufügen einer Spalte

  • Hallo zusammen,

    ich stehe vor einem großen Problem und finde einfach nichts in diesem forum oder über Google über dieses Thema.

    Ich habe ein kleines Tool, dass mit einer SQLite Datenbank arbeitet. Nun möchte ich eine weitere Funktion mit einbauen, dazu sollte aber die Tabellenstruktur der SQLite Datenbank geändert werden, es sollte in einer Tabelle eine Spalte hinzugefügt werden. Die aktuelle Struktur sieht so aus:

    Tabelle: Texte
    -> Spalte: ID
    -> Spalte: Subject
    -> Spalte: Text
    -> Spalte: Key
    -> Spalte: Active

    Hier soll jetzt über eine Art Updatefunktion die Struktur geändert werden und zwar soll eine zusätzliche Spalte namens "3zeiler" nach Active hinzugefügt werden. Einfach die vorhandene Datenbank löschen und eine neue anlegen, ist keine Option, da mein Tool bei mehreren Usern aktiv in Benutzung ist und jeder seine individuellen Texte in seiner Datenbank gespeichert hat. Ein mir eingefallener Weg wäre, alle Daten aus der DB auszulesen, in einem Array zu speichern, anschließend die alte DB löschen und eine neue Anlegen. Anschließend dann die Daten aus dem Array in die neue DB schreiben. Allerdings ist dies, zumindest für mich als totaler Neuling, eine verdammt schwere Aufgabe. Wenn es also ein leichteren Weg gäbe, wie Beispielsweise der "ALTER" Befehl in MySQL, wäre ich unglaublich erleichtert.

    Kennt jemand eine Alternative zum "ALTER" Befehl oder hat eine anderen, nicht ganz so schweren Lösungsweg für mich? Oder, falls es doch nicht anders geht: Hat vielleicht jemand bereits so eine DB Änderung durchgeführt und hat dazu noch ein kleines Script irgendwo rum fliegen?

  • Ich verstehe die Frage nicht ganz - warum willst du eine Alternative dazu haben - kommst du mit dem Befehl nicht klar?So sollte es doch funktionieren?:

    SQL
    ALTER TABLE Texte ADD COLUMN 3zeiler TEXT;

    Wie bereits geschrieben: Laut meinen bisherigen Recherchen, soll es bei SQLite diesen ALTER Befehl nicht geben. Daher hab ich es so auch nie getestet. Da du nun aber etwas anderes sagst, werde ich Dein Beispiel gleich mal testen.

  • Laut meinen bisherigen Recherchen, soll es bei SQLite diesen ALTER Befehl nicht geben.

    Wie sah denn diese Recherche aus?
    Zumindestens ausgerechnet die SQlite-Doku scheinst du dabei ausgelassen zu haben: https://www.sqlite.org/lang_altertable.html

    Was zumindestens richtig ist, ist dass das Alter Table von Sqlite lediglich eine Teilmenge des Alter Tables des SQL-Standards umfasst.
    Für ein ADD Column reicht es aber durchaus.

  • Wenn es eine NOT NULL Spalte wird erstmal ALTER TABLE xyz ADD COLUMN xyz dann entweder mit nem Default-Wert arbeiten, oder halt n Update-Statement drüberjubeln, und anschließend die Spalte modifizieren und auf NOT NULL setzen.

    Grüße Yaerox

    Grüne Hölle

  • Naja, eines der ersten Ergebnisse bei Google, als ich nach der Syntax für den ALTER Befehl in SQLite gesucht hatte, war eben, dass es diesen nicht geben würde. Aber egal, es hat einwandfrei funktioniert und ich bin zufrieden.

    Was ich dabei aber herausgefunden habe ist, dass Spaltennamen nicht mti einer Zahl beginnen dürfen. Aus "3zeiler" muss also z. B. "zeiler3" oder "dreizeiler" gemacht werden.

  • Was ich dabei aber herausgefunden habe ist, dass Spaltennamen nicht mti einer Zahl beginnen dürfen. Aus "3zeiler" muss also z. B. "zeiler3" oder "dreizeiler" gemacht werden.

    Doch doch das geht schon.
    Du musst den Namen halt nur in Graviszeichen ( ` ) schreiben ( auch später bei den Abfragen).
    Also die Tabellendeklaration würde dann so aussehen:

    SQL
    CREATE TABLE `3zeiler` (...);