SQLiteOpenHelper
onCreate()
en onUpgrade()
callbacks worden aangeroepen wanneer de database daadwerkelijk wordt geopend, bijvoorbeeld door een aanroep van getWritableDatabase()
. De database wordt niet geopend wanneer het database-helperobject zelf wordt gemaakt.
SQLiteOpenHelper
versies van de databasebestanden. Het versienummer is de int
argument doorgegeven aan de constructor. In het databasebestand wordt het versienummer opgeslagen in PRAGMA user_version
.
onCreate()
wordt alleen uitgevoerd als het databasebestand niet bestond en net is gemaakt. Als onCreate()
succesvol retourneert (geen uitzondering genereert), wordt aangenomen dat de database is gemaakt met het gevraagde versienummer. Als gevolg hiervan moet u SQLException
. niet vangen s in onCreate()
jezelf.
onUpgrade()
wordt alleen aangeroepen als het databasebestand bestaat maar het opgeslagen versienummer lager is dan gevraagd in de constructor. De onUpgrade()
moet het tabelschema bijwerken naar de gevraagde versie.
Bij het wijzigen van het tabelschema in code (onCreate()
), moet u ervoor zorgen dat de database is bijgewerkt. Twee hoofdbenaderingen:
-
Verwijder het oude databasebestand zodat
onCreate()
wordt weer gereden. Dit heeft vaak de voorkeur tijdens de ontwikkelingstijd waar u controle heeft over de geïnstalleerde versies en gegevensverlies geen probleem is. Enkele manieren om het databasebestand te verwijderen:-
Verwijder de applicatie. Gebruik de applicatiebeheerder of
adb uninstall your.package.name
uit de schaal. -
Duidelijke aanvraaggegevens. Gebruik de applicatiebeheerder.
-
-
Verhoog de databaseversie zodat
onUpgrade()
wordt ingeroepen. Dit is iets ingewikkelder omdat er meer code nodig is.-
Voor upgrades van het ontwikkeltijdschema waarbij gegevensverlies geen probleem is, kunt u gewoon
execSQL("DROP TABLE IF EXISTS <tablename>")
gebruiken in om uw bestaande tabellen te verwijderen enonCreate()
. aan te roepen om de database opnieuw te maken. -
Voor vrijgegeven versies moet u gegevensmigratie implementeren in
onUpgrade()
zodat uw gebruikers hun gegevens niet verliezen.
-