SQLite wann, wofür onUpgrade()?

B

Binbose

Ambitioniertes Mitglied
0
Hallo Leute
ich bin ein relativer Neuling im Entwickeln von Apps, und habe gerade bei SQLite ein paar Probleme, ich hoffe ihr könnt mir weiterhelfen.

Ich verstehe nicht so ganz, wann genau die onUpgrade() Methode vom SQLiteOpenHelper aufgerufen wird. Klar, wenn sich die Version der Datenbank erhöht, aber wann ist das? Schon wenn man einen Wert ändert, wenn man einen neuen Datensatz hinzufügt oder erst wenn man eine komplett neue Spalte hinzufügt? Oder einfach jedes mal wenn man die App updated? Ich habe echt keine Ahnung :unsure:

Und wofür ist diese Methode überhaupt gedacht? In den Tutorials und Büchern, die ich bisher darüber gelesen habe, steht immer man soll die Tabelle löschen und dann neue onCreate aufrufen, aber was ergibt das für einen Sinn? :confused2:

Danke schonmal im vorraus.

Mfg Binbose
 
Im Prinzip hast du deine Frage schon beantwortet.

Wenn du die DatenbankVersion (selber) hoch countest. Hier kommt es halt drauf an wie du mit dem Helper umgehst. Ich schreibe mir immer meinen eigenen Helper wo die Datenbankversion eine Konstante ist die ich bei Bedarf manuell hoch zähle und er mir die Datenbank frisch anlegt.

Das du bei der onUpgrade Methode die onCreate Methode aufrufst, ist der bequemste Weg. Einfach komplette Datenbank platt machen und neu erstellen lassen. Ist einfacher als mit "Alter"-Befehlen zu hantieren. Halte ich in meinem Projekten meistens genau so.

Gründe dafür:
- Datenbankstruktur hat sich geändert
- Man möchte einen frischen Datenstand
...
 
Zuletzt bearbeitet:
Funktioniert aber nur, wenn man die Datenbank für feste Werte nutzt die sich nicht ändern.
Und dann braucht man eigentlich nicht zwingend eine Datenbank.

Sobald man dort noch Werte per App einträgt wären die ja damit auch gelöscht was nicht im Sinne des Erfinders ist.
 
Gastuser schrieb:
Das du bei der onUpgrade Methode die onCreate Methode aufrufst, ist der bequemste Weg. Einfach komplette Datenbank platt machen und neu erstellen lassen. Ist einfacher als mit "Alter"-Befehlen zu hantieren. Halte ich in meinem Projekten meistens genau so.
Wie amfa schon schrieb funktioniert das natürlich für Datenbanken die du selber direkt mit auslieferst und die eigtl. nie vom Nutzer befüllt/geändert werden.

Wenn du das machst bei einer, sagen wir bspw. Notizapp, dann hauen dir die User bei so einem Updateverhalten die Bewertungen um die Ohren ;) Und eeeeigentlich ist es garnicht soooo viel was man da beachten muss, man selbst sollte ja wissen wie sein Datenbankschema aussieht und wenn das geändert wird, muss man halt exakt hierfür in der onUpgrade Methoden bereitstellen die bereits vorhandene Daten ins neue Schema übertragen :)
 
Danke, das ist mir klar. Habe nicht umsonst geschrieben, dass man dies so implementiert wenn man immer einen frischen Datenstand haben möchte. (<-- nicht so böse gemeint wies geschrieben ist :D )

Besonders vorm Release ist es für mich immer angenehmer so zu arbeiten, hoch counten und du hast einen frischen Datenstand. Nach dem Release wird die "drop"- und "onCreate"-Methode wieder entfernt und sinnvolle Sachen implementiert^^

Wollte oben auch nicht ins Detail gehen, da der TE offensichtlich die "onUpgrade"-Methode verwechselt hat mit einer "MeineDatenHabenSichGeaendert"-Methode.
 
Im Endeffekt kannst man alles mögliche in die Methode onUpgrade() schreiben. Soweit ich weiß, gibt es keine Vorschrift, was man in die Methode packt. ;)
Es ist einfach nur eine einfache Möglichkeit, Veränderungen an einer Datenbank zu erzwingen.

Die gebräuchlichste Variante ist mit "drop" eine alte Tabelle zu entfernen, und danach eine neue Tabelle zu erstellen.
 
markus.tullius schrieb:
Die gebräuchlichste Variante ist mit "drop" eine alte Tabelle zu entfernen, und danach eine neue Tabelle zu erstellen.

Das ist wirklich am gebräuchlisten?
Wofür habe ich denn eine Datenbank, wenn ich bei jedem update alle Daten darin lösche?

Eine Datenbank würde ich irgendwie nur für variable Werte nutzen wo ich auch Einträge hinzufüge.
Für fest vorgegeben Werte würde ich (vermutlich) was anderes nutzen.
 
Ja, ich habe da wirklcih was verwechselt^^ Aber hab jetzt verstanden, dass die Methode immer beim ändern der Datenbankversion im Quelltext aufgerufen wird.
Habe es jetzt auch erstmal mit der Drop und neu erstellen Methode gearbeitet, werde es aber zum Start der App natürlich noch ändern.
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.014
swa00
swa00
M
Antworten
5
Aufrufe
1.077
markusk73
M
Zurück
Oben Unten