SQLiteOpenHelper onCreate() a onUpgrade() zpětná volání jsou vyvolána, když je databáze skutečně otevřena, například voláním getWritableDatabase() . Databáze se neotevře, když je vytvořen samotný pomocný objekt databáze.
SQLiteOpenHelper verze databázových souborů. Číslo verze je int argument předaný konstruktoru. V databázovém souboru je číslo verze uloženo v PRAGMA user_version .
onCreate() se spouští pouze v případě, že databázový soubor neexistoval a byl právě vytvořen. Pokud onCreate() vrátí úspěšně (nevyvolá výjimku), předpokládá se, že databáze je vytvořena s požadovaným číslem verze. Z toho vyplývá, že byste neměli zachytit SQLException s v onCreate() sebe.
onUpgrade() je voláno pouze tehdy, když databázový soubor existuje, ale uložené číslo verze je nižší, než požaduje konstruktor. onUpgrade() by měl aktualizovat schéma tabulky na požadovanou verzi.
Při změně schématu tabulky v kódu (onCreate() ), měli byste se ujistit, že je databáze aktualizována. Dva hlavní přístupy:
-
Smažte starý databázový soubor tak, aby
onCreate()je znovu spuštěn. To je často preferováno v době vývoje, kdy máte kontrolu nad nainstalovanými verzemi a ztráta dat nepředstavuje problém. Některé způsoby odstranění databázového souboru:-
Odinstalujte aplikaci. Použijte správce aplikací nebo
adb uninstall your.package.nameze skořápky. -
Vymazat data aplikace. Použijte správce aplikací.
-
-
Zvyšte verzi databáze tak, aby
onUpgrade()je vyvoláno. To je trochu složitější, protože je potřeba více kódu.-
Pro upgrady vývojového schématu, kde ztráta dat nepředstavuje problém, stačí použít
execSQL("DROP TABLE IF EXISTS <tablename>")in k odstranění vašich stávajících tabulek a voláníonCreate()znovu vytvořit databázi. -
U vydaných verzí byste měli implementovat migraci dat v
onUpgrade()aby vaši uživatelé nepřišli o svá data.
-