Cómo hacer migraciones de base de datos con Room y Kotlin
Antonio Leiva

Las migraciones de base de datos son una parte importante del desarrollo de aplicaciones, ya que nos permiten cambiar el esquema de nuestra base de datos de manera segura y controlada.

Room, el framework de persistencia de Android, nos proporciona una manera fácil de realizar estas migraciones utilizando su API de migración.

En este artículo, vamos a ver cómo hacer migraciones con Room utilizando Kotlin como lenguaje de programación.

Creación de la base de datos

Antes de comenzar, es importante tener en cuenta que las migraciones solo se aplican a las bases de datos existentes.

Si aún no ha creado una base de datos en su aplicación, deberá seguir los pasos necesarios para crearla antes de poder realizar una migración.

Para empezar, primero debemos definir una clase que herede de RoomDatabase y anotarla con @Database.

Esta clase será la encargada de gestionar la conexión a nuestra base de datos y de proporcionar acceso a nuestras entidades de datos y daos.

@Database(entities = [User::class, Address::class], version = 2)
abstract class AppDatabase : RoomDatabase() {
  abstract fun userDao(): UserDao
  abstract fun addressDao(): AddressDao
}

La anotación @Database nos permite especificar las entidades que forman parte de nuestra base de datos, así como la versión actual de la base de datos.

En este caso, estamos utilizando la versión 2 de nuestra base de datos, que incluye las entidades User y Address.

Configuración de una migración manual en Room

Ahora que tenemos nuestra clase AppDatabase definida, podemos empezar a crear nuestras migraciones.

Una migración se define mediante una clase que herede de Migration y que implemente el método migrate().

Este método recibe dos parámetros: el objeto SupportSQLiteDatabase que representa la base de datos actual y el número de versión a la que se desea migrar.

class Migration1to2 : Migration(1, 2) {
  override fun migrate(database: SupportSQLiteDatabase) {
    // Realizamos la migración aquí
  }
}

En el cuerpo del método migrate(), podemos escribir el código necesario para realizar la migración.

Por ejemplo, si deseamos agregar una nueva columna a nuestra tabla de usuarios, podríamos escribir el siguiente código:

database.execSQL("ALTER TABLE users ADD COLUMN last_login INT")

Al construir la base de datos, debemos especificar la lista de migraciones que deseamos aplicar utilizando el método addMigrations().

val database = Room.databaseBuilder(context, AppDatabase::class.java, "app_database")
  .addMigrations(Migration1to2::class)
  .build()

Con esto, ya tenemos una base de datos que se encargará de aplicar las migraciones necesarias cuando se cree o se actualice la base de datos.

Migraciones automáticas en Room

Desde la versión 4.2.0 de Room, algunas migraciones se pueden hacer de forma automática. Solo hay que añadir una anotación a la definición de la base de datos:

@Database(
    entities = [User::class, Address::class], 
    version = 2,
    autoMigrations = [
        AutoMigration (from = 1, to = 2)
    ]
)
abstract class AppDatabase : RoomDatabase() {
  abstract fun userDao(): UserDao
  abstract fun addressDao(): AddressDao
}

Se pueden hacer ciertas configuraciones sobre las migraciones automáticas para casos un poco más complicados.

Conclusión

En resumen, realizar migraciones con Room es un proceso sencillo y eficiente que nos permite cambiar el esquema de nuestra base de datos de manera segura y controlada. Con la API de migración de Room, podemos definir nuestras migraciones y aplicarlas a nuestra base de datos de manera fácil y rápida.

Quizá también te interese…

Cómo simular una base de datos reactiva en Room con Fakes

Cómo simular una base de datos reactiva en Room con Fakes

En el desarrollo de aplicaciones móviles es muy común utilizar bases de datos para almacenar y gestionar la información que se utiliza en la aplicación. En el caso de Android, una de las opciones más populares es Room, una librería de persistencia de datos que...

Descargar una página web en Android con OkHttp

Descargar una página web en Android con OkHttp

En este tutorial vamos a aprender cómo descargar una página web en Android utilizando la librería OkHttp y la librería activity-ktx para facilitar el manejo de los ciclos de vida de nuestra aplicación. Configuración de la App Para empezar, necesitamos incluir las...

Usar Ktor Client para hacer peticiones HTTP en Android

Usar Ktor Client para hacer peticiones HTTP en Android

Ktor es un framework de servidor y cliente de Kotlin diseñado para crear aplicaciones web y móviles de forma rápida y fácil. En este artículo, veremos cómo usar Ktor client en una aplicación Android para hacer peticiones a una API. Configurar las dependencias de Ktor...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *