Room for Kotlin: Complete Guide with Examples

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

What is Room and why is it needed?



Room is a library for working with databases in Android applications written in Kotlin or Java. It provides an abstraction layer over SQLite, allowing you to work with the database through an object-oriented approach rather than raw SQL queries.



Main advantages of Room:

  • Minimizes boilerplate code — Room automatically generates code for working with SQLite based on annotations.
  • SQL query verification at compile time — errors in queries are detected before the application runs.
  • Integration with Coroutines and Flow — support for reactive programming and asynchronous operations.
  • Database migrations — built-in mechanisms for updating the schema without data loss.
  • TypeConverters — ability to store complex data types (e.g., Date, List) in the database.


Room is ideal for applications that need local storage of structured data: notes, cache, user settings, offline mode, etc.



Installing Room



Room is not installed via pip or npm, as it is an Android library. Adding it to a project is done through the build.gradle file (module level).



Step 1: Add the KSP (Kotlin Symbol Processing) plugin

In the root build.gradle, add the KSP plugin:

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


Step 2: Add Room in the app module

In the build.gradle of the app module, add:

plugins {    id 'com.android.application'    id 'org.jetbrains.kotlin.android'    id 'com.google.devtools.ksp'}

android { // ... your configuration}

dependencies { def room_version = "2.6.1"

implementation "androidx.room:room-runtime:$room_version" ksp "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-ktx:$room_version" // For Coroutines}


After syncing Gradle, the library is ready to use.



Quick start with code example



Let's create a simple application for storing a task list (Todo).



Step 1: Define the Entity

import androidx.room.Entityimport androidx.room.PrimaryKey

@Entity(tableName = "tasks")data class Task( @PrimaryKey(autoGenerate = true) val id: Int = 0, val title: String, val description: String, val isCompleted: Boolean = false)


Step 2: Create the DAO (Data Access Object)

import androidx.room.*import kotlinx.coroutines.flow.Flow

@Daointerface TaskDao { @Query("SELECT * FROM tasks ORDER BY id DESC") fun getAllTasks(): Flow<List<Task>>

@Insert suspend fun insertTask(task: Task)

@Update suspend fun updateTask(task: Task)

@Delete suspend fun deleteTask(task: Task)}


Step 3: Create the database

import android.content.Contextimport androidx.room.Databaseimport androidx.room.Roomimport androidx.room.RoomDatabase

@Database(entities = [Task::class], version = 1)abstract class AppDatabase : RoomDatabase() { abstract fun taskDao(): TaskDao

companion object { @Volatile private var INSTANCE: AppDatabase? = null

fun getDatabase(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "app_database" ).build() INSTANCE = instance instance } } }}


Step 4: Use

Recommendations