4 Stimmen

Wie gehe ich mit mehreren Datenbankversionen um, wenn eine Android-Anwendungsaktualisierung erfolgt?

Danke, dass du meine Frage hier liest.

Eigentlich habe ich einige Verwirrungen darüber, wie man mit SQLite-Tabellen umgeht, wenn ich einige Zeilen zur Tabelle für mehrere SQLite-Versionen hinzufügen muss.

Ich google Dinge und habe etwas ähnliches gefunden, was wir in der onUpgrade-Methode ändern müssen. Das würde eine sequenzielle Aktualisierung sein.

Annehmen, ich habe 3 Geräte, die folgende Datenbankversionen haben.
1) 1. Gerät = Datenbankversion 1
2) 2. Gerät = Datenbankversion 2
3) 3. Gerät = Anwendung nicht installiert.

Datenbankversion 1 = 2 Spalten
Datenbankversion 2 = 2+2 Spalten
Datenbankversion 3 = 4+2 Spalten.

Also, wenn ich meinen Android-Anwendungsbenutzern ein Update geben muss, was muss ich tun? Ich habe folgende Szenarien.

1) Die aktualisierte Anwendung soll auf dem 3. Gerät installiert werden, auf dem die Anwendung noch nicht installiert ist.
2) Die Anwendung sollte von Version 1 auf Version 3 aktualisiert werden (Gerät 1.).
3) Die Anwendung sollte von Version 2 auf Version 3 aktualisiert werden (Gerät 2.).

Hier kann ich mir überlegen, wie ich Szenario Nummer 3 handhaben kann, aber ich weiß nicht, wie ich die Szenarien 1 und 2 behandeln kann.

Wie kann ich den Code schreiben, damit er für alle Szenarien funktioniert.

Die onUpgrade-Methode wird nur aufgerufen, wenn sich die Datenbankversion ändert, und onCreate wird aufgerufen, wenn die Datenbank erstellt wird.

Danke für jegliche Hilfe und Anregungen.

8voto

NigelK Punkte 8015

Von dem, was du erwähnt hast (z.B. die onUpgrade-Methode), gehe ich davon aus, dass du einen SQLiteOpenHelper verwendest.

Aktualisiere zuerst deine Datenbankversion auf 3.

In onCreate(SQLiteDatabase db) aktualisiere den Code so, dass er alle Tabellen gemäß dem neuesten Schema Version 3 erstellt (z.B. die Tabelle hat col1, col2 und col3). Eine neue Installation wird diesen Code auslösen und eine brandneue v3-Tabelle erstellen.

In onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) beziehe dich auf die alten und neuen Versionen und aktualisiere die bereits vorhandenen Tabellen entsprechend, z.B.

if (oldVersion == 1 && newVersion = 2)
{
    //Wechsel von v1 zu v2
    db.execSQL("ALTER TABLE mytable ADD COLUMN col2 INTEGER");
}

if (oldVersion == 1 && newVersion = 3)
{
    //Wechsel von v1 zu v3
    db.execSQL("ALTER TABLE mytable ADD COLUMN col2 INTEGER");
    db.execSQL("ALTER TABLE mytable ADD COLUMN col3 INTEGER");
}

if (oldVersion == 2 && newVersion = 3)
{
    //Wechsel von v2 zu v3
    db.execSQL("ALTER TABLE mytable ADD COLUMN col3 INTEGER");
}

Dieser Code wird ausgelöst, wenn die Datenbankversion nicht mit der übereinstimmt, die der Benutzer derzeit hat. Du kennst die Version, die sie haben, also kannst du die vorhandenen Tabellen entsprechend anpassen, um sie auf die gleiche Definition zu bringen, die in onCreate gefunden wird. Du kannst natürlich alles tun, was du in onUpgrade möchtest, wie das Erstellen neuer Tabellen und das Einfügen/Aktualisieren/Löschen von Daten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X