Automatische Migrationen zu Room

Bis heute mussten alle Änderungen an der Struktur der Datenbank manuell in die Migrationsklasse geschrieben werden, um Room mitzuteilen, was sich genau geändert hat. In den meisten Fällen bedeutete dies das Schreiben komplexer SQL-Abfragen.





Ab Version Alpha01 2.4.0 ist die Migration der Datenbankstruktur im Raum wesentlich einfacher - es erfolgt eine automatische Migration (Auto-Migration).





In einfachen Fällen (z. B. Hinzufügen oder Entfernen einer Spalte, Erstellen einer neuen Tabelle) geben Sie einfach an, von welcher Version Sie migrieren möchten, und Room erledigt die gesamte Drecksarbeit für Sie und generiert automatisch Migrationen.





In komplexeren (und mehrdeutigen) Fällen benötigt Room Hilfe: Sie müssen angeben, welche Spalte oder Tabelle umbenannt oder gelöscht wurde. Basierend auf diesen Daten generiert Room automatisch die Migration und führt sie aus.





Schauen wir uns einige Beispiele an, um besser zu verstehen, wie dies funktioniert.





Aktivieren Sie automatische Migrationen

Angenommen, wir fügen der Tabelle eine neue Spalte hinzu (Übergang von Version 1 zu Version 2). Infolgedessen müssen wir die Anmerkung aktualisieren, @Database



indem wir die Versionsnummer erhöhen und bestimmte Versionen schreiben in AutoMigration



:





, , , AutoMigration



:





Room ? , . :





  • ,





  • , ,





  • ..





: . , , exportSchema



true



. : Cannot create auto-migrations when export schema is OFF.





?

, Room' . , .





: Room , ( ) . , Room AutoMigrationSpec, .





AutoMigrationSpec :





  • @DeleteTable(tableName)



    — , ,





  • @RenameTable(fromTableName, toTableName)



    — , ,





  • @DeleteColumn(tableName, columnName)



    — , ,





  • @RenameColumn(tableName, fromColumnName, toColumnName)



    — , , .





, Doggos



GoodDoggos



. Room :





  • GoodGoggos



    , , , (Doggos



    ) ,





  • Doggos



    , .





:





vs.

1.0, Room Migration . , .





, . Room , . , , .





Migration



, databaseBuilder()



addMigrations()



:





Room . , 1 2 Migration



, 2 3 — ..





, , .





?

: Migration



, .





, Room , , @Database



. , Room .





MigrationTestHelper



helper.runMigrationsAndValidate()



, Migration.





.





. — autoMigrations



@Database



( exportSchema = true



).





Der Raum kann einfache Fälle automatisch behandeln, aber in komplexeren und mehrdeutigen Situationen müssen wir das Wesentliche der vorgenommenen Änderungen beschreiben. Verwenden Sie in allen anderen Fällen regelmäßige Migrationen.





Die Funktionalität der automatischen Migrationen befindet sich im Alpha- Status . Helfen Sie uns, es besser zu machen, indem Sie Feedback im Bug-Tracker hinterlassen .





Nützliche Links

  1. Dokumentation zu @AutoMigration.





  2. Liste der Commits , die in Version 2.4.0-alpha01 enthalten waren.








All Articles