Aby dodać tutaj brakujące punkty, zgodnie z prośbą Jaskeya
Wersja bazy danych jest przechowywana w SQLite
pliku 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 onUpgrade
przypadek na przykładzie.
Powiedzmy, że Twoja pierwsza wersja aplikacji miała DatabaseHelper
(rozszerzającą się SQLiteOpenHelper
) wersję konstruktora przekazującą as, 1
a 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 DatabaseHelper
zbudowaniu platforma uruchamia onUpgrade
się, 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 1
i 2
. To właśnie rozumiem przez przyrostową aktualizację.
Powiedz, czy stara wersja jest, 2
a nowa wersja jest4
, to logika zaktualizuje bazę danych z 2
do, 3
a następnie do4
Jeśli stara wersja 3
i nowa wersja jest 4
, to wystarczy uruchomić aktualizację logikę 3
do4