sql >> Database >  >> RDS >> SQLite

Wanneer wordt SQLiteOpenHelper onCreate() / onUpgrade() uitgevoerd?

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:

  1. 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.

  2. 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 en onCreate() . 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.



  1. MariaDB Backup &PostgreSQL in de cloud - ClusterControl Release 1.6.1

  2. PostgreSQL-kolommen wijzigen die in weergaven worden gebruikt

  3. Patchgeschiedenistabellen in Oracle Apps (11i/R12.1/R12.2)

  4. MySQL-query om kolomnamen te krijgen?