SPALTE HINZUFÜGEN, um sqlite-db-WENN NICHT VORHANDEN - flex/air sqlite?
Habe ich eine flex/air-app, die ich gearbeitet habe, es verwendet eine lokale sqlite-Datenbank, die erstellt wird, auf die erste Anwendung starten.
Habe ich Hinzugefügt einige features auf die Anwendung und den Prozess, den ich hatte, um ein neues Feld hinzufügen zu einer Datenbank-Tabellen. Meine Frage ist, wie gehe ich darum, die Anwendung zu erstellen Sie ein neues Feld, das sich in einer Tabelle, die bereits existiert?
dies ist die Zeile, die die Tabelle erstellt
stmt.text = "CREATE TABLE IF NOT EXISTS tbl_status ("+"status_id INTEGER PRIMARY KEY AUTOINCREMENT,"+" status_status TEXT)";
Und jetzt hätte ich gern ein status_default Feld.
Dank!
Dank - MPelletier
Ich habe fügen Sie den code, den Sie zur Verfügung gestellt, und es hat das Feld hinzufügen, aber jetzt ich das nächste mal neu starten meiner app bekomme ich eine Fehlermeldung - 'status_default' existiert bereits'.
Also, wie kann ich gehen über das hinzufügen von eine Art IF not EXISTS " - Anweisung, um die Zeile, die Sie zur Verfügung gestellt?
Adam, ich habe aktualisiert mein Antwort. Bitte siehe unten.
InformationsquelleAutor Adam | 2010-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://www.sqlite.org/lang_altertable.html
Diesem wird gesagt, das hinzufügen von Spalten in SQLite beschränkt. Sie können nicht fügen Sie eine Spalte irgendwo, aber nach der letzten Spalte in der Tabelle.
Als für die überprüfung, ob die Spalte bereits existiert,
PRAGMA table_info(tbl_status);
gibt eine Tabelle, in der die verschiedenen Spalten der Tabelle.ADD-ON:
Habe ich mit einer Strategie, die in Datenbank-design, die ermöglicht es mir, zu unterscheiden, welche änderungen erforderlich sind. Für diese, müssen Sie eine neue Tabelle (nennen wir es
DBInfo
), mit einem Feld (Integer, nennen esSchemaVersion
). Alternativ gibt es auch einen internen Wert in SQLite genanntuser_version
, die gesetzt werden können, mit einemPRAGMA
Befehl. Ihr code kann auf Programm-Start, überprüfen Sie für die schema-Versionsnummer und die änderungen gelten entsprechend, eine version zu einer Zeit.Angenommen, eine Funktion namens
UpdateDBSchema()
. Diese Funktion überprüft, ob Ihre Datenbank-schema-version, Griff DBInfo nicht da ist, und bestimmen, dass die Datenbank in der version 0. Der rest der diese Funktion können Sie nur einen großen Schalter, mit verschiedenen Versionen, eingebettet in eine Schleife (oder eine andere Struktur zur Verfügung, um Ihre Plattform der Wahl).So, in dieser ersten version haben eine
UpgradeDBVersion0To1()
- Funktion, die Sie erstellen, die diese neue Tabelle (DBInfo
), fügen Sie Ihrestatus_default
Feld, und legen SieSchemaVersion
1. In Ihrem code, fügen Sie eine Konstante, die angibt, die aktuelle schema-version, sagenLATEST_DB_VERSION
, und setzen Sie ihn auf 1. Auf diese Weise, Ihren code und die Datenbank ein schema-version, und Sie wissen, Sie brauchen, um synchronisieren Sie Sie, wenn Sie nicht gleich sind.Wenn Sie brauchen, um eine weitere änderung zu Ihrem schema, legen Sie die
LATEST_DB_VERSION
ständige auf 2 und stellen einen neuenUpgradeDBVersion1To2()
Funktion, führen Sie die erforderlichen änderungen vor.So, Ihr Programm portiert werden kann leicht eine Verbindung herstellen können und der Umstieg von einer alten Datenbank, etc.
Nochmals vielen Dank MPelletier, die mir wirklich geholfen!
Dies ist, wie RoundhousE umgesetzt wird. github.com/chucknorris/roundhouse/wiki
InformationsquelleAutor MPelletier
Ich weiß, das ist eine alte Frage... aber.
Den ich getroffen habe, diese genaue problem im SQLite-Implementierung in Adobe AIR. Ich dachte, es würde möglich sein, mit Hilfe der PRAGMA-Anweisung zu lösen, aber da adobe air-Implementierung unterstützt nicht die PRAGMA-Anweisung, brauchen wir eine alternative.
Was ich Tat, dass ich dachte, würde sein Wert bei dem Austausch hier, ist dies:
Hoffe, es hilft jemand.
PRAGMA ist NICHT verfügbar in der OP-Szenario, daher posten Sie die richtige Lösung für dieses spezielle Szenario.
InformationsquelleAutor stevesweets
Löste ich ein ähnliches problem mit der Antwort von dieser Frage:
ÄNDERN TABELLE SPALTE HINZUFÜGEN, WENN NICHT VORHANDEN in SQLite
Eingebaut user_version parameter zu verfolgen Ihre updates. Sie setzen es mit:
und rufen Sie es mit
Also im Grunde abrufen user_version (es ist standardmäßig "0"), prüfen, ob es 0 ist. Wenn ja, führen Sie Ihre updates und auf 1 setzen. Wenn Sie in Zukunft weitere updates, prüfen, ob es 1, durchführen von updates, und stellen Sie es auf 0. Und so weiter...
InformationsquelleAutor Eternal21
In einigen Fällen habe ich den Befehl ausgeführt und bekomme die Ausnahme für "doppelte Spalte". Nur eine schnelle Lösung, nicht die perfekte.
InformationsquelleAutor Seraphim's