Room para Kotlin: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Room e para que serve?

\n\n

Room é uma biblioteca para trabalhar com bancos de dados em aplicativos Android, escritos em Kotlin ou Java. Ela fornece uma camada de abstração sobre o SQLite, permitindo trabalhar com o banco de dados através de uma abordagem orientada a objetos, em vez de consultas SQL brutas.

\n\n

Principais vantagens do Room:

\n
    \n
  • Minimização de código boilerplate — Room gera automaticamente o código para trabalhar com SQLite com base em anotações.
  • \n
  • Verificação de consultas SQL em tempo de compilação — erros nas consultas são detectados antes da execução do aplicativo.
  • \n
  • Integração com Coroutines e Flow — suporte a programação reativa e operações assíncronas.
  • \n
  • Migrações de banco de dados — mecanismos integrados para atualizar o esquema sem perda de dados.
  • \n
  • TypeConverters — possibilidade de armazenar tipos de dados complexos (por exemplo, Date, List) no banco.
  • \n
\n\n

Room é ideal para aplicativos que precisam de armazenamento local de dados estruturados: anotações, cache, configurações do usuário, modo offline, etc.

\n\n

Instalação do Room

\n\n

Room não é instalado via pip ou npm, pois é uma biblioteca para Android. A adição ao projeto ocorre através do arquivo build.gradle (nível do módulo).

\n\n

Passo 1: Adicione o plugin KSP (Kotlin Symbol Processing)

\n

No build.gradle raiz, adicione o plugin KSP:

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

Passo 2: Conecte o Room no módulo do aplicativo

\n

No build.gradle do módulo app, adicione:

\n
plugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'com.google.devtools.ksp'\n}\n\nandroid {\n    // ... sua configuração\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

Após sincronizar o Gradle, a biblioteca está pronta para uso.

\n\n

Início rápido com exemplo de código

\n\n

Vamos criar um aplicativo simples para armazenar uma lista de tarefas (Todo).

\n\n

Passo 1: Defina a entidade (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

Passo 2: Crie o 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

Passo 3: Crie o banco de dados

\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

Passo 4: Use o

Recommendations