Muy buenas, soy Miguel y en esta ocasión les traigo un artículo.
Migraciones de bases de datos de habitaciones
La migración de bases de datos es un concepto muy importante en el desarrollo de cualquier aplicación. A medida que agregamos y cambiamos funciones en su aplicación, tenemos que actualizar el esquema de nuestra base de datos. Siempre que haya un cambio en el esquema de cualquiera de nuestras tablas, necesitamos escribir una migración para la aplicación existente si no queremos que nuestros usuarios pierdan todos sus datos existentes.
Por ejemplo, podemos considerar una tabla llamada users
que contiene información de usuarios y tiene 3 columnas denominadas uid
, first_name
y last_name
. Ahora, si agregamos una nueva columna para age
, necesitamos escribir una migración para alterar el esquema de la tabla actual, es decir, agregar una nueva columna llamada age
.
los Biblioteca de persistencia de habitaciones nos permite escribir Migration
clases para preservar los datos del usuario de esta manera. Cada Migration
clase especifica una startVersion
y endVersion
. En tiempo de ejecución, Room ejecuta cada Migration
clase migrate()
método, usando el orden correcto para migrar la base de datos a una versión posterior.
val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("ALTER TABLE users ADD COLUMN age INTEGER") } }
Ahora hemos creado el objeto de migración. MIGRATION_1_2
, debemos agregarlo en la configuración de la base de datos usando el generador de bases de datos.
Room.databaseBuilder( applicationContext, UserDatabase::class.java, "users-db" ).addMigrations(MIGRATION_1_2) .build()
Manejar con elegancia las rutas de migración que faltan
Después de actualizar los esquemas de nuestra base de datos, es posible que algunas bases de datos en el dispositivo aún puedan usar una versión de esquema anterior. Si Room no puede encontrar una regla de migración para actualizar la base de datos de ese dispositivo de la versión anterior a la versión actual, arroja una IllegalStateException
lo que hace que nuestra aplicación se bloquee.
Para evitar que la aplicación se bloquee cuando se produzca esta situación, llame al fallbackToDestructiveMigration()
método constructor al crear la base de datos.
Room.databaseBuilder( applicationContext, UserDatabase::class.java, "users-db" ).fallbackToDestructiveMigration() .build()
La lógica alternativa de recreación destructiva incluye varias opciones adicionales:
- Si se producen errores en versiones específicas de su historial de esquema que no puede resolver con rutas de migración, utilice
fallbackToDestructiveMigrationFrom()
. Este método indica que le gustaría que Room usara la lógica de respaldo solo en los casos en que la base de datos intente migrar desde una de esas versiones problemáticas. - Para realizar una recreación destructiva solo al intentar una degradación de esquema, use
fallbackToDestructiveMigrationOnDowngrade()
en lugar.
Gracias por leer este artículo.
Añadir comentario