Room para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Room y para qué sirve?

\n\n

Room es una biblioteca para trabajar con bases de datos en aplicaciones Android escritas en Kotlin o Java. Proporciona una capa de abstracción sobre SQLite, permitiendo trabajar con la base de datos mediante un enfoque orientado a objetos, en lugar de consultas SQL directas.

\n\n

Principales ventajas de Room:

\n
    \n
  • Minimización de código repetitivo — Room genera automáticamente el código para trabajar con SQLite basándose en anotaciones.
  • \n
  • Verificación de consultas SQL en tiempo de compilación — los errores en las consultas se detectan antes de ejecutar la aplicación.
  • \n
  • Integración con Coroutines y Flow — soporte para programación reactiva y operaciones asíncronas.
  • \n
  • Migraciones de base de datos — mecanismos integrados para actualizar el esquema sin pérdida de datos.
  • \n
  • TypeConverters — posibilidad de almacenar tipos de datos complejos (por ejemplo, Date, List) en la base de datos.
  • \n
\n\n

Room es ideal para aplicaciones que necesitan almacenamiento local de datos estructurados: notas, caché, configuraciones de usuario, modo offline, etc.

\n\n

Instalación de Room

\n\n

Room no se instala mediante pip o npm, ya que es una biblioteca para Android. La incorporación al proyecto se realiza a través del archivo build.gradle (a nivel de módulo).

\n\n

Paso 1: Agregue el plugin KSP (Kotlin Symbol Processing)

\n

En el build.gradle raíz, agregue el plugin KSP:

\n
plugins {\n    id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false\n}
\n\n

Paso 2: Conecte Room en el módulo de la aplicación

\n

En el build.gradle del módulo app, agregue:

\n
plugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'com.google.devtools.ksp'\n}\n\nandroid {\n    // ... su configuración\n}\n\ndependencies {\n    def room_version = "2.6.1"\n\n    implementation "androidx.room:room-runtime:$room_version"\n    ksp "androidx.room:room-compiler:$room_version"\n    implementation "androidx.room:room-ktx:$room_version" // Para Coroutines\n}
\n\n

Después de sincronizar Gradle, la biblioteca está lista para usar.

\n\n

Inicio rápido con un ejemplo de código

\n\n

Crearemos una aplicación simple para almacenar una lista de tareas (Todo).

\n\n

Paso 1: Defina la entidad (Entity)

\n
import androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = "tasks")\ndata class Task(\n    @PrimaryKey(autoGenerate = true)\n    val id: Int = 0,\n    val title: String,\n    val description: String,\n    val isCompleted: Boolean = false\n)
\n\n

Paso 2: Cree el DAO (Data Access Object)

\n
import androidx.room.*\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\ninterface TaskDao {\n    @Query("SELECT * FROM tasks ORDER BY id DESC")\n    fun getAllTasks(): Flow<List<Task>>\n\n    @Insert\n    suspend fun insertTask(task: Task)\n\n    @Update\n    suspend fun updateTask(task: Task)\n\n    @Delete\n    suspend fun deleteTask(task: Task)\n}
\n\n

Paso 3: Cree la base de datos

\n
import android.content.Context\nimport androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\n\n@Database(entities = [Task::class], version = 1)\nabstract class AppDatabase : RoomDatabase() {\n    abstract fun taskDao(): TaskDao\n\n    companion object {\n        @Volatile\n        private var INSTANCE: AppDatabase? = null\n\n        fun getDatabase(context: Context): AppDatabase {\n            return INSTANCE ?: synchronized(this) {\n                val instance = Room.databaseBuilder(\n                    context.applicationContext,\n                    AppDatabase::class.java,\n                    "app_database"\n                ).build()\n                INSTANCE = instance\n                instance\n            }\n        }\n    }\n}
\n\n

Paso 4: Use

Recommendations