Gruki Logo

Gruki - Documentación de Programación

Kotlin

Room Database en Kotlin: ¡Guarda tus datos como un profesional!

Aprende cómo usar Room Database en Kotlin para guardar datos en tu aplicación de Android de forma fácil y segura. ¡Como tener una caja fuerte para la información!

Room Database es una biblioteca que nos ayuda a guardar información en nuestras aplicaciones de Android de manera organizada. Imagina que tienes una caja de juguetes: Room te ayuda a organizarlos para que siempre encuentres el que necesitas.

En lugar de juguetes, Room guarda datos como nombres, números o listas. Así, tu aplicación puede recordar cosas importantes incluso cuando la cierras y la vuelves a abrir.

¿Por qué usar Room en lugar de guardar los datos en papel?

Piensa en un cuaderno donde anotas tus cosas. Con el tiempo, puede ser difícil encontrar lo que buscas. Room es como un cuaderno súper organizado donde todo está en su lugar y puedes encontrarlo rápidamente.

Además, Room te ayuda a evitar errores. Si intentas guardar algo incorrecto, Room te avisará. Es como tener un corrector que te dice si estás escribiendo bien.

Puntos importantes:

  • Room usa SQL, un lenguaje para hablar con bases de datos. No te asustes, ¡es más fácil de lo que parece! Room te ayuda a usar SQL sin tener que escribirlo todo tú mismo.
  • Room es parte de Android Jetpack, un conjunto de herramientas que Google pone a nuestra disposición para hacer aplicaciones de Android mejores y más rápido.

Los tres ingredientes mágicos de Room: Entidad, DAO y Database

Para usar Room, necesitamos tres cosas importantes: una Entidad, un DAO y una Database. ¡Suenan complicados, pero son fáciles!

Imagina que la Entidad es un juguete, el DAO es la forma de guardar y sacar ese juguete de la caja, y la Database es la caja de juguetes en sí.

Entidad: ¡Define qué vas a guardar!

La Entidad es una clase que representa los datos que quieres guardar. Por ejemplo, si quieres guardar información sobre perros, la Entidad será una clase llamada 'Perro'.

Cada 'Perro' tendrá propiedades como su nombre, raza y edad. Es como describir cada uno de tus perros para que Room sepa qué guardar de ellos.

Puntos importantes:

  • Usamos anotaciones (@) para decirle a Room que esta clase es una Entidad y qué propiedades son importantes. Las anotaciones son como etiquetas que le dan información extra a Room.
  • Necesitamos definir una clave primaria, que es una propiedad que identifica a cada 'Perro' de forma única. Es como el número de identificación de cada perro.

DAO: ¡La forma de hablar con la base de datos!

DAO significa Data Access Object. Es una interfaz que define las funciones para acceder y modificar los datos. Piensa en el DAO como los botones para interactuar con la caja de juguetes: agregar juguetes, sacar juguetes, etc.

El DAO define funciones como 'insertar', 'actualizar', 'borrar' y 'obtener' 'Perros'. Usamos anotaciones para decirle a Room qué hace cada función. ¡Room se encargará de escribir el código SQL por nosotros!

Database: ¡La caja de juguetes donde guardamos todo!

La Database es la clase que representa la base de datos en sí. Es la caja donde guardamos todos los 'Perros'.

Esta clase debe ser abstracta y extender la clase 'RoomDatabase'. Usamos anotaciones para decirle a Room qué Entidades debe contener la base de datos y la versión de la base de datos. La versión es importante para cuando queramos agregar nuevas propiedades a nuestros 'Perros'.

Ejemplos de Código

Definición de la Entidad 'Perro' con anotaciones para Room.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: import androidx.room.Entity: Importamos la anotación 'Entity' para marcar la clase como una tabla en la base de datos.
  2. Línea 2: import androidx.room.PrimaryKey: Importamos la anotación 'PrimaryKey' para indicar cuál columna es la clave principal (identificador único) de la tabla.
  3. Línea 3: @Entity: Indica que la clase 'Perro' es una entidad de Room, lo que significa que representa una tabla en la base de datos.
  4. Línea 4: data class Perro(...): Definimos una clase de datos llamada 'Perro'.
  5. Línea 5: @PrimaryKey val id: Int: Declaramos una propiedad llamada 'id' de tipo Int y la marcamos como la clave primaria. Cada perro tendrá un ID único, como su número de identificación.
  6. Línea 6: val nombre: String: Declaramos una propiedad llamada 'nombre' de tipo String. Guardamos el nombre del perro.
  7. Línea 7: val raza: String: Declaramos una propiedad llamada 'raza' de tipo String. Guardamos la raza del perro.
  8. Línea 8: val edad: Int: Declaramos una propiedad llamada 'edad' de tipo Int. Guardamos la edad del perro.

Definición del DAO para la entidad 'Perro'.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: import androidx.room.Dao: Importamos la anotación 'Dao' para marcar la interfaz como un Data Access Object.
  2. Línea 2: import androidx.room.Insert: Importamos la anotación 'Insert' para definir una función que inserta datos en la tabla.
  3. Línea 3: import androidx.room.Query: Importamos la anotación 'Query' para definir consultas SQL.
  4. Línea 4: @Dao: Indica que esta interfaz es un DAO.
  5. Línea 5: interface PerroDao { ... }: Definimos una interfaz llamada 'PerroDao'.
  6. Línea 6: @Query("SELECT * FROM Perro"): Definimos una función 'getAll' que ejecuta una consulta SQL para obtener todos los perros de la tabla 'Perro'.
  7. Línea 7: fun getAll(): List<Perro>: La función 'getAll' retorna una lista de objetos 'Perro'.
  8. Línea 8: @Insert: Definimos una función 'insertAll' que inserta uno o más objetos 'Perro' en la tabla.
  9. Línea 9: fun insertAll(vararg perros: Perro): La función 'insertAll' toma una lista variable de objetos 'Perro' como argumento.

Definición de la clase 'AppDatabase' que extiende 'RoomDatabase'.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: import androidx.room.Database: Importamos la anotación 'Database' para marcar la clase como una base de datos Room.
  2. Línea 2: import androidx.room.RoomDatabase: Importamos la clase abstracta 'RoomDatabase'.
  3. Línea 3: @Database(entities = [Perro::class], version = 1): Indica que esta clase es una base de datos Room. 'entities' define las entidades (tablas) que contiene la base de datos. 'version' define la versión de la base de datos. Si cambias la estructura de la base de datos (agregas o eliminas columnas, etc.), debes incrementar la versión.
  4. Línea 4: abstract class AppDatabase : RoomDatabase() { ... }: Definimos una clase abstracta llamada 'AppDatabase' que hereda de 'RoomDatabase'.
  5. Línea 5: abstract fun perroDao(): PerroDao: Definimos una función abstracta 'perroDao' que retorna una instancia de 'PerroDao'. Room se encargará de implementar esta función por nosotros.

Recursos relacionados

Explora más contenido relacionado con Uso de Room Database para profundizar tus conocimientos.