A classe de banco de dados Room
Crie e acesse seu banco de dados.
A classe de banco de dados Room é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Reunindo tudo
A classe do banco de dados é o principal ponto de acesso. Ela lista suas entidades, declara a versão e expõe seus DAOs.
A anotação @Database
Crie uma classe abstrata que estenda RoomDatabase e anote-a com @Database.
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(
entities = [User::class],
version = 1
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}Listando entidades e versão
A matriz entities informa ao Room quais tabelas criar. O número de version acompanha as alterações do esquema para as migrações.
Expondo DAOs
Para cada DAO, declare uma função abstrata que retorne o tipo desse DAO. O Room a implementa.
abstract fun userDao(): UserDao
abstract fun noteDao(): NoteDaoConstruindo o banco de dados
Use Room.databaseBuilder para criar uma instância. Ele precisa do contexto do aplicativo, da classe e de um nome para o banco de dados.
val db = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app.db"
).build()Transforme-o em um singleton
Criar um banco de dados é uma operação cara, portanto crie uma única instância para todo o aplicativo. Um padrão comum usa um objeto companion com um getter sincronizado.
companion object {
@Volatile private var INSTANCE: AppDatabase? = null
fun get(context: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: build(context).also { INSTANCE = it }
}
}Por que um singleton é importante
Várias instâncias do banco de dados abririam várias conexões para o mesmo arquivo, causando inconsistência e desperdício de memória. Uma única instância compartilhada mantém uma única fonte de verdade.
Fornecendo-o com o Hilt
Em aplicativos reais, geralmente você fornece o banco de dados por meio da injeção de dependências (abordada no curso de Hilt), em vez de usar um singleton manual.
@Provides
@Singleton
fun provideDb(@ApplicationContext ctx: Context) =
Room.databaseBuilder(ctx, AppDatabase::class.java, "app.db")
.build()Alterações de esquema e migrações
Quando você altera uma entidade, incremente version e forneça uma Migration que descreva o SQL para transformar os dados antigos.
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER NOT NULL DEFAULT 0")
}
}Migração destrutiva
Durante o desenvolvimento inicial, você pode usar fallbackToDestructiveMigration(), que exclui e recria as tabelas em vez de migrá-las. Nunca publique isso em produção com dados reais de usuários.
Acessando DAOs
Depois de obter a instância do banco de dados, obtenha um DAO e chame seus métodos dentro de uma corrotina.
val dao = db.userDao()
viewModelScope.launch {
dao.insert(User(1, "Ada", "ada@x.com"))
}Verificação rápida
Teste sua compreensão sobre a classe do banco de dados.
Recapitulação
Você aprendeu:
@Databaselista entidades, define uma versão e expõe DAOs.- Construa-o com
Room.databaseBuildercomo um singleton. - As alterações de esquema precisam de uma versão incrementada e de uma Migration.
Perguntas Frequentes
A aula “A classe de banco de dados Room” é grátis?
Sim — o texto completo de “A classe de banco de dados Room” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “A classe de banco de dados Room”?
Crie e acesse seu banco de dados. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “A classe de banco de dados Room”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Entidades e DAOs
- A classe de banco de dados Room
- Consultas e relacionamentos
- Observando dados com Flow