Aby dodać tutaj brakujące punkty, zgodnie z prośbą Jaskeya
Wersja bazy danych jest przechowywana w SQLitepliku bazy danych.
catch jest konstruktorem
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
Tak więc gdy wywoływany jest konstruktor pomocnika bazy danych z name(2. parametr), platforma sprawdza, czy baza danych istnieje, czy nie, a jeśli baza istnieje, pobiera informacje o wersji z nagłówka pliku bazy danych i wyzwala właściwe oddzwonienie
Jak już wyjaśniono w starszej odpowiedzi, jeśli baza danych o nazwie nie istnieje, uruchamia się onCreate.
Poniżej wyjaśnienie wyjaśnia onUpgradeprzypadek na przykładzie.
Powiedzmy, że Twoja pierwsza wersja aplikacji miała DatabaseHelper (rozszerzającą się SQLiteOpenHelper) wersję konstruktora przekazującą as, 1a następnie dostarczyłeś uaktualnioną aplikację z nowym kodem źródłowym, którego wersja została przekazana jako 2, a następnie automatycznie po DatabaseHelperzbudowaniu platforma uruchamia onUpgradesię, widząc, że plik już istnieje, ale wersja jest niższa niż bieżąca wersja, którą przeszedłeś.
Powiedzmy teraz, że planujesz podać trzecią wersję aplikacji w wersji db jako 3(wersja db jest zwiększana tylko wtedy, gdy schemat bazy danych ma zostać zmodyfikowany). W takich przyrostowych aktualizacjach musisz zapisywać logikę aktualizacji z każdej wersji przyrostowo, aby uzyskać łatwiejszy do utrzymania kod
Przykładowy pseudo kod poniżej:
@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);
}
}
Zauważ brak break instrukcję w przypadku 1i 2. To właśnie rozumiem przez przyrostową aktualizację.
Powiedz, czy stara wersja jest, 2a nowa wersja jest4 , to logika zaktualizuje bazę danych z 2do, 3a następnie do4
Jeśli stara wersja 3i nowa wersja jest 4, to wystarczy uruchomić aktualizację logikę 3do4