2016-09-16 5 views
0

Für SQLiteOpenHelper, wenn ich eine neue Tabelle innerhalb onCreate muss ich alles innerhalb onUpgrade tun? Ich füge eine völlig neue Tabelle hinzu. Ich glaube, ich muss die Versionsnummer ändern, aber das onUpgrade sollte leer bleiben. Ist das korrekt?Hinzufügen neuer Tabelle zu SQLite

+0

Haben Sie bereits eine frühere Version Ihrer App veröffentlicht? –

+0

Ja, ich habe :). –

Antwort

2

Wenn Sie möchten, dass vorhandene Installationen der App diese neue Tabelle hinzufügen, dann müssen Sie die Version erhöhen und eine geeignete onUpgrade()-Implementierung bereitstellen sowie die Tabelle in onCreate() hinzufügen (die Sie bereits angegeben haben) .

Eine leere onUpgrade() Implementierung ist nicht ausreichend; es muss tatsächlich etwas tun. Einige Leute lassen alle Tische fallen und rufen einfach onCreate() direkt an, aber das funktioniert offensichtlich nicht gut, wenn Sie versuchen, bestehende Daten zu behalten. Ich benutze normalerweise die Durchsicht switch Idiom, so dass, wenn ein Benutzer mehr als eine Version ist (z. B. Sie eine Version 3 veröffentlichen und ein Benutzer immer noch auf Version 1 ist) werden sie alle notwendigen Upgrades nacheinander durchlaufen:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    switch (oldVersion) { 
     case 1: 
      db.execSQL("CREATE TABLE " + ...); 
      // no break statement, so case 2 will execute after this. 
     case 2: 
      // more execSQL(), etc 
    } 
} 
+0

Beachten Sie, dass Sie, wenn Sie nur entwickeln (also noch niemand die App hat), das Upgrade überspringen und nur 'onCreate()' ausführen können, aber Sie müssen die Datenbank entfernen, damit sie neu erstellt wird. Du kannst dies tun, indem du deinstallierst und neu installierst oder die App unter Einstellungen> Apps findest und dort ihre Daten löschst. – Karakuri

0

onUpgrade wird nur aufgerufen, wenn Sie die Versionsnummer erhöhen.

Um es zu implementieren, müssen Sie die Tabellen mit den von Ihnen vorgenommenen Änderungen neu erstellen und vorhandene Daten kopieren. Es gibt viele Tutorials zu diesem Thema.

Es ist nicht notwendig zu implementieren, wenn Sie noch lernen, aber wenn Sie nicht und Sie Änderungen an Ihrem Schema vornehmen, müssen Sie die App vom Gerät deinstallieren oder die Änderungen werden nicht angewendet.

1

onCreate() wird nicht aufgerufen, wenn ein Benutzer Ihre App bereits zuvor installiert hat. Sie müssen also auch die neue Tabelle in onUpgrade() erstellen. Achten Sie darauf, die Versionsnummer Ihrer Datenbank zu erhöhen.

Ich schlage vor, den Code zum Erstellen der Tabelle in einer Hilfsmethode, so dass Sie es aus beiden Callback-Methoden aufrufen können. Dies verringert die Wahrscheinlichkeit eines Fehlers, falls Sie den Code zum Erstellen der Tabelle ändern müssen.

+0

Guter Punkt. Vielen Dank. +1 –

Verwandte Themen