Um hier fehlende Punkte weiter hinzuzufügen, gemäß der Anfrage von Jaskey
Die Datenbankversion wird in der SQLite
Datenbankdatei gespeichert.
catch ist der Konstruktor
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Wenn der Datenbank- name
Hilfskonstruktor mit einem (2. Parameter) aufgerufen wird, prüft die Plattform, ob die Datenbank vorhanden ist oder nicht, und ob die Datenbank vorhanden ist, ruft die Versionsinformationen aus dem Datenbankdateikopf ab und löst den richtigen Rückruf aus
Wie bereits in der älteren Antwort erläutert, wird die Datenbank mit dem Namen ausgelöst, wenn sie nicht vorhanden ist onCreate
.
Die folgende Erklärung erläutert den onUpgrade
Fall anhand eines Beispiels.
Angenommen, Ihre erste Version der Anwendung hatte die DatabaseHelper
(erweiterte SQLiteOpenHelper
) Version, bei der der Konstruktor übergeben wurde, 1
und dann haben Sie eine aktualisierte Anwendung mit dem neuen Quellcode bereitgestellt, dessen Version als Plattform übergeben wurde 2
, und dann automatisch, wenn die DatabaseHelper
Plattform ausgelöst wirdonUpgrade
indem die Datei bereits vorhanden ist. Die Version ist jedoch niedriger als die aktuelle Version, die Sie übergeben haben.
Angenommen, Sie planen, eine dritte Version der Anwendung mit der 3
Datenbankversion as anzugeben (die Datenbankversion wird nur erhöht, wenn das Datenbankschema geändert werden soll). Bei solchen inkrementellen Upgrades müssen Sie die Upgrade-Logik von jeder Version inkrementell schreiben, um einen besser wartbaren Code zu erhalten
Beispiel Pseudocode unten:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion) {
case 1:
//upgrade logic from version 1 to 2
case 2:
//upgrade logic from version 2 to 3
case 3:
//upgrade logic from version 3 to 4
break;
default:
throw new IllegalStateException(
"onUpgrade() with unknown oldVersion " + oldVersion);
}
}
Beachten Sie die fehlende break
Aussage in case 1
und 2
. Das meine ich mit inkrementellem Upgrade.
Angenommen, die alte Version ist 2
und die neue Version ist 4
, dann aktualisiert die Logik die Datenbank von 2
bis 3
und dann bis4
Wenn die alte Version 3
und die neue Version ist 4
, wird nur die Upgrade-Logik für 3
to ausgeführt4