Um hier fehlende Punkte weiter hinzuzufügen, gemäß der Anfrage von Jaskey
Die Datenbankversion wird in der SQLiteDatenbankdatei gespeichert.
catch ist der Konstruktor
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Wenn der Datenbank- nameHilfskonstruktor 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 onUpgradeFall anhand eines Beispiels.
Angenommen, Ihre erste Version der Anwendung hatte die DatabaseHelper(erweiterte SQLiteOpenHelper) Version, bei der der Konstruktor übergeben wurde, 1und dann haben Sie eine aktualisierte Anwendung mit dem neuen Quellcode bereitgestellt, dessen Version als Plattform übergeben wurde 2, und dann automatisch, wenn die DatabaseHelperPlattform 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 3Datenbankversion 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 breakAussage in case 1und 2. Das meine ich mit inkrementellem Upgrade.
Angenommen, die alte Version ist 2und die neue Version ist 4, dann aktualisiert die Logik die Datenbank von 2bis 3und dann bis4
Wenn die alte Version 3und die neue Version ist 4, wird nur die Upgrade-Logik für 3to ausgeführt4