SQLiteOpenHelper
onCreate()
i onUpgrade()
wywołania zwrotne są wywoływane, gdy baza danych jest rzeczywiście otwierana, na przykład przez wywołanie getWritableDatabase()
. Baza danych nie jest otwierana podczas tworzenia samego obiektu pomocniczego bazy danych.
SQLiteOpenHelper
wersje plików bazy danych. Numer wersji to int
argument przekazany do konstruktora. W pliku bazy danych numer wersji jest przechowywany w PRAGMA user_version
.
onCreate()
jest uruchamiany tylko wtedy, gdy plik bazy danych nie istniał i został właśnie utworzony. Jeśli onCreate()
zwraca pomyślnie (nie zgłasza wyjątku), zakłada się, że baza danych została utworzona z żądanym numerem wersji. W konsekwencji nie powinieneś przechwytywać SQLException
s w onCreate()
siebie.
onUpgrade()
jest wywoływana tylko wtedy, gdy plik bazy danych istnieje, ale przechowywany numer wersji jest niższy niż żądany w konstruktorze. onUpgrade()
powinien zaktualizować schemat tabeli do żądanej wersji.
Podczas zmiany schematu tabeli w kodzie (onCreate()
), upewnij się, że baza danych jest zaktualizowana. Dwa główne podejścia:
-
Usuń stary plik bazy danych, aby
onCreate()
jest uruchamiany ponownie. Jest to często preferowane w czasie programowania, gdy masz kontrolę nad zainstalowanymi wersjami, a utrata danych nie stanowi problemu. Kilka sposobów na usunięcie pliku bazy danych:-
Odinstaluj aplikację. Użyj menedżera aplikacji lub
adb uninstall your.package.name
z powłoki. -
Wyczyść dane aplikacji. Użyj menedżera aplikacji.
-
-
Zwiększ wersję bazy danych, aby
onUpgrade()
jest wywoływany. Jest to nieco bardziej skomplikowane, ponieważ potrzeba więcej kodu.-
W przypadku aktualizacji schematu w czasie programowania, w których utrata danych nie stanowi problemu, możesz po prostu użyć
execSQL("DROP TABLE IF EXISTS <tablename>")
w, aby usunąć istniejące tabele i wywołaćonCreate()
aby odtworzyć bazę danych. -
W przypadku wydanych wersji należy zaimplementować migrację danych w
onUpgrade()
aby Twoi użytkownicy nie stracili swoich danych.
-