Ferramentas de Armazenamento e CRUD em Apps Móveis | [SIS]ANO2C1B2S8A2 | professorcomia.com.br
[SIS]ANO2C1B2S8A2 Unidade 2 · Componente 1 Armazenamento de dados e repositórios Aula 2 · Prática

Ferramentas de armazenamento, entidades, DAOs e operações Create, Read, Update e Delete implementadas em Kotlin e Swift no contexto do ensino técnico de Desenvolvimento de Sistemas.

Desenvolvimento de Sistemas Android · iOS Room · Core Data · SQLite CRUD · @Entity · @Dao Aula Prática · 45 min

Por que o aluno implementa o CRUD errado na primeira vez?

A sequência é quase previsível: o estudante cria a entidade, escreve o DAO, instancia o banco — e na hora de executar uma consulta, o app fecha com uma exceção de banco de dados. Às vezes a query está mal formada. Às vezes o tipo da coluna não corresponde. Às vezes a anotação @Query aponta para uma tabela com nome diferente do que foi declarado na entidade.

O problema quase nunca é falta de esforço. É ausência de um modelo mental claro sobre como os três componentes do Room — entidade, DAO e banco de dados — se relacionam. Quando o estudante entende a arquitetura antes de escrever a primeira linha de código, os erros diminuem e a depuração se torna sistemática, não tentativa.

Custo concreto de não dominar o tema: um app de lista de tarefas sem CRUD funcional não é um app — é uma tela estática. Sem persistência real, nenhum projeto do curso técnico sobrevive à fase de avaliação. No mercado, qualquer desenvolvedor mobile precisa implementar CRUD com Room ou Core Data como competência de entrada, não diferencial.

O contexto da aula prática no ensino técnico público

Esta é a segunda aula da Unidade 2 — Armazenamento de Dados. Na aula anterior, os conceitos teóricos foram estabelecidos: a diferença entre memória volátil, SharedPreferences, arquivos e banco de dados local. Agora é o momento da implementação: 45 minutos, em grupo, com computador e internet, entrega de texto-síntese no AVA.

O formato em grupo não é casual. Implementar CRUD exige tomadas de decisão constantes — como nomear a tabela, quais operações expor no DAO, como inicializar o banco sem bloquear a thread principal. A discussão entre pares é parte do aprendizado, não apenas a execução do código.

O professor conduz a atividade a partir do roteiro oficial da SEDUC-SP, garantindo que os passos de configuração, definição de entidade, DAO, banco e operações CRUD sejam seguidos sequencialmente antes de qualquer execução.

≡ definição · crud em banco de dados móvel local

CRUD é o conjunto de quatro operações fundamentais sobre dados persistidos: Create (inserir), Read (consultar), Update (atualizar) e Delete (remover). No Room, cada operação é declarada em uma interface DAO via anotações e implementada automaticamente pelo framework em tempo de compilação.

Como as ferramentas de armazenamento local se comparam?

FerramentaPlataformaModelo de dadosSuporte a CRUDIndicado para
SharedPreferencesAndroidChave-valorParcial (sem Update/Delete granular)Configurações simples
UserDefaultsiOSChave-valorParcialPreferências do usuário
RoomAndroidRelacional (SQLite)Completo (@Insert @Query @Update @Delete)Listas, registros estruturados
Core DataiOSObjeto gerenciadoCompleto (NSFetchRequest, save, delete)Objetos com relacionamentos
SQLite diretoAndroid / iOSRelacionalCompleto (SQL bruto)Controle granular, sem abstração

A arquitetura do Room em três camadas

Room organiza o acesso ao banco de dados em três componentes independentes com responsabilidades distintas: a entidade define a estrutura da tabela; o DAO declara as operações disponíveis; o banco de dados conecta os dois e fornece o ponto de entrada para a aplicação.

Qual é o passo a passo correto para criar um banco de dados com Room?

{ } método estruturado · room android · 5 passos
  1. Configurar dependências: adicionar room-runtime e room-compiler no build.gradle do módulo app. O compilador Room é o responsável por gerar o código concreto do DAO em tempo de build.
  2. Definir a entidade: criar uma data class anotada com @Entity, declarando todos os campos como propriedades Kotlin. A coluna id recebe @PrimaryKey(autoGenerate = true).
  3. Criar o DAO: definir uma interface anotada com @Dao contendo métodos anotados para cada operação CRUD. As queries SQL são validadas em tempo de compilação.
  4. Implementar o AppDatabase: criar uma classe abstrata que estende RoomDatabase, anotada com @Database listando as entidades e a versão do esquema. Expor o DAO como método abstrato.
  5. Instanciar e executar: obter a instância do banco via Room.databaseBuilder e chamar as operações do DAO. Operações de escrita devem rodar em thread de background (Coroutine ou Thread separada).

Implementação completa: app de lista de tarefas com CRUD

Template 1 — Dependências (build.gradle · Android)

build.gradle (app) ▶ Groovy / Kotlin DSL
// No bloco dependencies do build.gradle do módulo app dependencies { implementation "androidx.room:room-runtime:2.4.2" kapt "androidx.room:room-compiler:2.4.2" // kapt exige o plugin kotlin-kapt no topo do arquivo }// No topo do build.gradle plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' // obrigatório para o compilador Room }

Template 2 — Entidade, DAO e AppDatabase (Room · Kotlin)

Tarefa.kt · TarefaDao.kt · AppDatabase.kt — Android · Room ▶ Kotlin
// ── 1. ENTIDADE — mapeia a tabela "tarefas" ── @Entity(tableName = "tarefas") data class Tarefa( @PrimaryKey(autoGenerate = true) val id: Int = 0, val titulo: String, val status: String // "pendente" | "completa" )// ── 2. DAO — interface com todas as operações CRUD ── @Dao interface TarefaDao {@Insert // CREATE fun inserirTarefa(tarefa: Tarefa)@Query("SELECT * FROM tarefas") // READ — todas fun obterTodasTarefas(): List<Tarefa>@Query("SELECT * FROM tarefas WHERE status = :status") // READ — filtro fun obterPorStatus(status: String): List<Tarefa>@Update // UPDATE fun atualizarTarefa(tarefa: Tarefa)@Delete // DELETE fun removerTarefa(tarefa: Tarefa) }// ── 3. DATABASE — ponto de entrada ── @Database(entities = [Tarefa::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun tarefaDao(): TarefaDao }

Template 3 — Operações CRUD em uso (Kotlin / Coroutine)

MainActivity.kt — uso do AppDatabase ▶ Kotlin
// Instanciar o banco (apenas uma vez — usar Singleton em produção) val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "tarefas-db" ).build()val dao = db.tarefaDao()// Room proíbe operações na main thread — usar Coroutine ou Thread Thread { // CREATE — inserir nova tarefa dao.inserirTarefa(Tarefa(titulo = "Estudar Room", status = "pendente"))// READ — listar todas val lista = dao.obterTodasTarefas()// UPDATE — marcar como completa val primeira = lista.first() dao.atualizarTarefa(primeira.copy(status = "completa"))// DELETE — remover dao.removerTarefa(primeira) }.start()

Template 4 — Core Data (iOS · Swift): inserção e consulta

TarefaRepository.swift — iOS · Core Data ▶ Swift
import CoreDataclass TarefaRepository { private let context: NSManagedObjectContextinit(context: NSManagedObjectContext) { self.context = context }// CREATE func inserirTarefa(titulo: String, status: String = "pendente") { let nova = Tarefa(context: context) nova.titulo = titulo nova.status = status try? context.save() }// READ func obterTodasTarefas() -> [Tarefa] { let req: NSFetchRequest<Tarefa> = Tarefa.fetchRequest() return (try? context.fetch(req)) ?? [] }// UPDATE func atualizarStatus(tarefa: Tarefa, novoStatus: String) { tarefa.status = novoStatus try? context.save() }// DELETE func removerTarefa(tarefa: Tarefa) { context.delete(tarefa) try? context.save() } }

Caso aplicado: app de lista de tarefas no laboratório do curso técnico

{ } caso real · ensino médio técnico · SEDUC-SP · laboratório

Atividade prática desenvolvida em grupo, 45 minutos, no laboratório de informática com acesso à internet. O contexto é um app de lista de tarefas com armazenamento local usando Room (Android). O estudante precisa definir a entidade Tarefa com três campos (id, titulo, status), implementar um DAO com os quatro métodos CRUD e configurar o AppDatabase.

Perguntas que o grupo deve responder ao fim da atividade: qual a vantagem do Room sobre arquivos diretos; como cada operação CRUD é implementada no DAO; como a modelagem do banco impacta a performance do app. O texto-síntese é entregue no AVA ao término da aula.

A atividade é deliberadamente acessível para um primeiro contato com persistência relacional, mas contém complexidade suficiente para exigir decisão técnica real: o grupo precisa escolher os tipos de dados das colunas, decidir se o campo status será String ou Boolean, e garantir que as operações não bloqueiem a thread principal.

→ expansão estratégica · 4 frentes de aplicação
>_

Projeto Integrador

App de controle de empréstimos do laboratório: CRUD completo com Room, filtro por status e exportação em CSV — projeto real com impacto na escola.

{ }

Blog / Autoridade

Série técnica: “Do SQLite bruto ao Room” com comparativo linha a linha — conteúdo de alta busca entre estudantes e professores de mobile.

Cultura Maker

App de inventário de componentes eletrônicos do fab lab escolar: CRUD com foto e localização física, desenvolvido pelos alunos do técnico.

Avaliação Pedagógica

Rubrica técnica para projetos mobile: critérios de modelagem, completude do CRUD, tratamento de erros e performance — documentação para avaliação formativa.

Síntese: Room (Android) e Core Data (iOS) são as ferramentas de referência para banco de dados local em apps móveis. Ambas implementam CRUD via camada de abstração sobre SQLite. A arquitetura do Room em três camadas — entidade, DAO e banco de dados — exige configuração sequencial e correta para funcionar. A modelagem da entidade e a qualidade das queries no DAO impactam diretamente a performance e a manutenibilidade do app.

Perguntas frequentes sobre CRUD e ferramentas de armazenamento mobile

O que é CRUD em banco de dados móvel?

CRUD é o conjunto de quatro operações fundamentais sobre dados persistidos: Create (inserir novo registro), Read (consultar registros), Update (atualizar registro existente) e Delete (remover registro). No Room, cada operação é anotada respectivamente com @Insert, @Query, @Update e @Delete dentro de uma interface DAO.

Qual a vantagem de usar Room em vez de manipular arquivos diretamente?

O Room oferece validação de queries em tempo de compilação, mapeamento automático entre objetos Kotlin e tabelas SQLite via anotações, suporte nativo a LiveData e Flow para reatividade, e elimina o código boilerplate de abertura, cursor e fechamento que a API SQLite bruta exige.

O que é uma entidade no Room?

Uma entidade Room é uma data class Kotlin anotada com @Entity que representa uma tabela no banco de dados. Cada campo da classe corresponde a uma coluna da tabela. A anotação @PrimaryKey marca a chave primária, e autoGenerate=true delega ao SQLite a geração automática de identificadores únicos.

O que é um DAO no Room e para que serve?

DAO (Data Access Object) é uma interface no Room responsável por declarar todas as operações de acesso ao banco de dados. Cada método recebe uma anotação Room que o framework implementa automaticamente em tempo de compilação, sem que o desenvolvedor precise escrever SQL manualmente para operações básicas.

Como a estruturação do banco de dados afeta a performance do app móvel?

A modelagem impacta diretamente a velocidade de leitura e escrita. Índices em colunas usadas em filtros aceleram queries. Colunas com tipos corretos reduzem espaço em disco. Evitar dados duplicados diminui o volume de registros processados. Queries que varrem toda a tabela tornam-se gargalos visíveis em dispositivos de entrada.

>_ Sequência completa da Unidade 2 — Armazenamento de Dados

Acompanhe todas as aulas, roteiros de atividade e materiais de apoio no blog do Professor Comia.

acessar professorcomia.com.br →

Conclusão: a arquitetura antes do código

Ensinar CRUD no ensino técnico não é ensinar quatro anotações Kotlin. É ensinar que nenhum dado sobrevive ao fechamento de um app sem uma decisão deliberada de persistência, e que essa decisão tem consequências em performance, manutenção e escalabilidade.

O estudante que termina esta aula sabendo distinguir entidade, DAO e banco de dados — e entendendo por que o Room valida queries em tempo de compilação — tem o modelo mental necessário para enfrentar qualquer banco de dados local em qualquer plataforma. A ferramenta muda. O raciocínio permanece.

[SIS]ANO2C1B2S8A2 · Unidade 2 · Componente 1 · Ferramentas de armazenamento de dados · Aula Prática
professorcomia.com.br · diariodeumpoed.com.br · POED SEDUC-SP

// slides de aula · [SIS]ANO2C1B2S8A2 · aula prática · crud com room e core data

>_ Ferramentas de Armazenamento de Dados

abertura · slide_01
frequência · registrar presença agora

Código: [SIS]ANO2C1B2S8A2  ·  Unidade 2 · Componente 1 · Aula 2

Aula 2 — Ferramentas de armazenamento de dados · Aula prática em grupo · 45 minutos

? Você sabe a diferença entre guardar dados em uma variável e guardar em um banco de dados? O que acontece com cada um quando o app fecha?

[ ] Objetivos da Aula

objetivos · slide_02
  • conceitual Identificar ferramentas e ambientes de desenvolvimento para armazenamento de dados em apps móveis
  • procedimental Criar um banco de dados básico para uma aplicação móvel usando Room (Android) ou Core Data (iOS)
  • atitudinal Promover a curiosidade e o interesse em novas maneiras de armazenar e gerenciar dados
≡ recursos · computador com internet · lápis e caderno · 1 caneta · ambiente de desenvolvimento

! Problema Gerador

problema_gerador · slide_03

Você está desenvolvendo um app de lista de tarefas (to-do list). O usuário adiciona, consulta e remove tarefas. Todas as informações devem ser salvas localmente no dispositivo.

! desafio 1

Como definir a estrutura (tabela) que armazenará id, titulo e status de cada tarefa?

! desafio 2

Como implementar todas as operações CRUD — inserir, listar, atualizar e remover — de forma organizada e validada?

? Qual ferramenta usar e como estruturar o banco de dados para garantir eficiência e organização no app?

{ } Ferramentas de Armazenamento Local

conceito · slide_04
  • SharedPreferences / UserDefaults · pares chave-valor · preferências simples · sem suporte a coleções estruturadas
  • Arquivos Locais · JSON, PDF, imagens · dados não estruturados · sem consultas nativas
  • Room (Android) · abstração sobre SQLite · anotações Kotlin · CRUD validado em compile-time
  • Core Data (iOS) · objetos gerenciados · NSManagedObjectContext · fetch requests com predicados
  • SQLite direto · SQL bruto · controle total · mais código, mais risco de erro
Room e Core Data garantem eficiência, organização e escalabilidade — a escolha profissional para dados estruturados.

# Entidade e DAO no Room

conceito · slide_05

@Entity — define a tabela. Cada campo = uma coluna. @PrimaryKey(autoGenerate=true) gera o id automaticamente.

Tarefa.kt · @Entity ▶ Kotlin
@Entity(tableName = "tarefas")
data class Tarefa(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val titulo: String,
    val status: String
)

@Dao — interface com as operações. Room gera a implementação em compile-time.

DAO e AppDatabase — CRUD Completo

conceito · slide_06
TarefaDao.kt · AppDatabase.kt ▶ Kotlin
@Dao
interface TarefaDao {
    @Insert   fun inserirTarefa(t: Tarefa)
    @Query("SELECT * FROM tarefas")
              fun obterTodasTarefas(): List<Tarefa>
    @Update   fun atualizarTarefa(t: Tarefa)
    @Delete   fun removerTarefa(t: Tarefa)
}
@Database(entities = [Tarefa::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun tarefaDao(): TarefaDao
}

Caderno — Definições da Aula

caderno · slide_07
  • CRUD · Create, Read, Update, Delete — as quatro operações fundamentais sobre dados persistidos
  • @Entity · anotação Room que mapeia uma data class a uma tabela SQLite
  • @PrimaryKey(autoGenerate=true) · delega ao SQLite a geração automática do identificador único
  • @Dao · interface que declara as operações do banco; Room implementa automaticamente
  • @Insert / @Query / @Update / @Delete · anotações das quatro operações CRUD no Room
  • AppDatabase · classe abstrata que estende RoomDatabase e expõe os DAOs
  • NSManagedObjectContext · contexto Core Data (iOS) equivalente ao conjunto Dao+Database do Room
  • build.gradle · arquivo de configuração do projeto Android onde as dependências do Room são declaradas

{ } Contexto da Atividade Prática

contexto_atividade · slide_08

Título: Ferramentas de armazenamento de dados e criação de banco de dados em aplicações móveis

Formato: em grupo · 45 minutos · computador com internet · entrega no AVA

Objetivo: criar um banco de dados local usando Room (Android) ou Core Data (iOS) que suporte as operações CRUD completas para um app de lista de tarefas.

{ } estrutura da tabela

id (Int) — identificador único

titulo (String) — título da tarefa

status (String) — pendente / completa

[ ] entregar ao final

Texto-síntese com respostas às 3 perguntas do roteiro enviado no AVA.

Planejamento — Antes de Codificar

planejamento · slide_09

Realize o esboço no papel antes de abrir o IDE.

∑ variáveis / campos

id: Int — PK autogerada pelo Room

titulo: String — texto da tarefa (não nulo)

status: String — “pendente” | “completa”

{ } componentes Room

@Entity → define a tabela

@Dao → declara as 4 operações

AppDatabase → ponto de entrada

∑ Decisão de grupo: o campo status será String ou Boolean? Justifiquem a escolha no texto-síntese.

>_ Fluxo Lógico da Implementação

algoritmo · slide_10
  • 1 Configurar dependências Room no build.gradle + plugin kotlin-kapt
  • 2 Criar data class Tarefa com @Entity e campos id, titulo, status
  • 3 Criar interface TarefaDao com @Insert @Query @Update @Delete
  • 4 Criar abstract class AppDatabase com @Database e método tarefaDao()
  • 5 Instanciar o banco e executar cada operação CRUD em thread de background

Implementação — Orientações de IDE

implementacao · slide_11
◉ android studio

Projeto: Empty Activity · Language: Kotlin · Min SDK: API 21

Adicionar dependências no build.gradle e sincronizar com Gradle antes de criar as classes.

◉ xcode (ios)

Novo projeto com opção “Use Core Data” marcada. Usar o Data Model Editor para criar a entidade Tarefa.

  • Passo 1 · adicionar dependências e sincronizar
  • Passo 2 · criar Tarefa.kt com anotações
  • Passo 3 · criar TarefaDao.kt com os 4 métodos
  • Passo 4 · criar AppDatabase.kt e testar build
  • Passo 5 · executar operações CRUD na Activity e verificar o log

! Casos de Teste — O que Verificar

testes · slide_12
✓ caso normal

Inserir tarefa com titulo=”Comprar material” e status=”pendente”.

Esperado: id gerado automaticamente, registro aparece em obterTodasTarefas().

! caso de atualização

Alterar status da tarefa inserida de “pendente” para “completa” via atualizarTarefa().

Esperado: consulta retorna tarefa com status=”completa”.

∅ caso vazio / remoção

Remover todas as tarefas via removerTarefa().

Esperado: obterTodasTarefas() retorna lista vazia, sem erro.

! Room proíbe operações de banco na main thread — se o app travar, verifique se está usando Thread ou Coroutine.

Entrega no AVA

entrega_ava · slide_13

Envie o texto-síntese com as respostas às três perguntas do roteiro:

⌨ o que incluir

Pergunta 1 — Vantagem do Room / Core Data sobre armazenar em arquivos.

Pergunta 2 — Diferenças entre Create, Read, Update e Delete e como cada uma é implementada.

Pergunta 3 — Como a estruturação do banco afeta a performance do app móvel.

✓ critérios de avaliação

Correção técnica das respostas.

Coerência entre resposta e implementação realizada.

Participação do grupo: todos os nomes na entrega.

⌨ entrega · texto/síntese no AVA até o final da aula · formato livre · mínimo 10 linhas · todos os nomes do grupo

Então Ficamos Assim…

sintese · slide_14
>_

Escolha da Ferramenta

Em desenvolvimento móvel, a ferramenta de armazenamento deve ser escolhida conforme a estrutura e o volume dos dados — de chave-valor a banco relacional completo.

{ }

Room e Core Data

Garantem eficiência, organização e escalabilidade para dados estruturados — com API de CRUD validada e abstração sobre SQLite / objetos gerenciados.

CRUD Implementado

@Insert, @Query, @Update e @Delete no Room. save(), fetch() e delete() no Core Data. Operações em background thread.

← aula anterior

Conceitos básicos de armazenamento · RAM, SharedPreferences, Arquivos e Banco de Dados Local · Sincronização off-line

→ próxima aula

Implementação de banco de dados · Operações avançadas, consultas com filtro e integração com a interface do usuário

📘 Gostou do que viu aqui no laboratório? No Professor com IA eu mostro, passo a passo, como você também pode criar ferramentas assim — mesmo sem saber programar.