sqlite DB zu tun, während iphone-app-update
Habe ich einige Allgemeine Fragen über iphone app-updates beinhaltet, dass die sqlite-db.
-
Mit dem neuen update wird die vorhandene sqlite-db überschrieben bekommen mit einer Kopie des neuen?
-
Wenn das update nicht um ein schema ändert, dann sollte der Benutzer in der Lage sein, um die Wiederverwendung der vorhandenen Datenbank mit Ihren Daten, die gespeichert, richtig? (wenn Sie die vorhandene Datenbank nicht überschrieben wird von 1 oben )
-
Wenn es einige schema-änderungen, was ist der beste Weg, um Daten aus der alten Datenbank in die neue? Kann jemand bitte geben mir Richtlinien und Beispiel-code?
- Auch die hervorragende Antwort: developer.appcelerator.com/question/127927/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur Dateien in das app-bundle ersetzt. Wenn die Datenbank-Datei in den app-Documents-Verzeichnis, wird Sie nicht ersetzt werden. (Beachten Sie, dass wenn Sie änderungen an Dateien in Ihrem app-bundle, die code Signatur nicht mehr gültig sein, und die app wird nicht gestartet. So, es sei denn, Sie werden mit einem read-only-Datenbank, es müsste im Verzeichnis "Documents".)
Ja.
Was das beste ist hängt von den Daten. Du wirst doch nicht um Beispiel-code für eine solche generische Frage. Zuerst müssen Sie erkennen, dass Ihre app ausgeführt wird, mit einer alten DB-version. Dann brauchen Sie, um es zu aktualisieren.
Versionen überprüfen:
metadata
mit einemname
undvalue
Spalte. Ich verwenden, um zu speichern einige Allgemeine Werte, einschließlich einerdataversion
Anzahl. Ich check diese Zahl, wenn ich die Datenbank öffnen, und wenn es weniger ist, als die aktuelle version, ich ein upgrade nicht.Aktualisieren:
sqlite3_exec
alle Arbeit tun. (Tun Sie dies innerhalb einer Transaktion, im Fall, dass es ein problem ist!)Wenn Ihr upgrade führen Sie eine lange Zeit (mehr als eine Sekunde), sollten Sie Anzeige einen Upgrade-Bildschirm, erklären die Benutzer, was Los ist.
1) Die Datenbank-Datei nicht gespeichert als Teil des app-bundle und Nein, es wird nicht automatisch überschrieben.
2) ja, alle Ihre Daten gespeichert werden. In der Tat, die Datenbank nicht bekommen überhaupt berührt durch das update.
3) das ist der "tricky" - Lesen dieses unglaublich interessante Dokument - vor allem der Teil auf leichte migration - wenn Ihr schema-änderungen sind klein und Folgen einem bestimmten Satz von Regeln, Sie wird automatisch durchgeführt, und der Benutzer nicht bemerkt wird. allerdings, wenn es sind größere änderungen am schema, das Sie haben, um zu schreiben Ihre eigenen Migrations-code (das ist in dass auch links)
Habe ich es immer geschafft zu entkommen, läuft leicht Migrationen mich - es ist bei weitem einfacher, als es selbst tun.
Was ich mache ist, dass ich erstellen Sie eine Arbeitskopie der Datenbank wird in das Verzeichnis Dokumente. Die primäre Kopie kommt mit dem bundle. Wenn ich ein update der app habe ich dann die option, um eine neue Kopie über die arbeiten zu kopieren, oder lassen Sie es.