Room : Base de données locale

Objectif : Comprendre le fonctionnement de Room et réaliser des opérations CRUD de base.

Bases de données locales (Partie 1)

Pourquoi utiliser Room ?

  • SQLite est puissant mais complexe à manipuler directement.
  • Room est une abstraction au-dessus de SQLite :
    • Syntaxe simplifiée
    • Sécurité de type (type-safety)
    • Intégration avec LiveData et ViewModel
  • Room = DAO + Entity + Database
Bases de données locales (Partie 1)

Composants de Room

  • @Entity : représente une table
  • @Dao : interface d'accès aux données
  • @Database : classe principale de la base

Architecture typique :

UI -> ViewModel -> Repository -> DAO -> Room -> SQLite
Bases de données locales (Partie 1)

Diagramme d'architecture

8e4b761713e3a76b

Bases de données locales (Partie 1)

Définir une entité

@Entity
data class Articles(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val titre: String,
    val fait: Boolean
)
Bases de données locales (Partie 1)

Créer une interface DAO

@Dao
interface ArticlesDao {
    @Query("SELECT * FROM articles") fun getAll(): List<Article>
    @Insert suspend fun inserer(article: Article)
    @Update suspend fun update(article: Article)
    @Delete suspend fun supprimer(article: Article)
}
Bases de données locales (Partie 1)

Créer la base de données

@Database(entities = [Article::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun articleDao(): ArticleDao
}
Bases de données locales (Partie 1)

Initialisation de Room

val db = Room.databaseBuilder(
    applicationContext,
    AppDatabase::class.java, "articles-db"
).build()
  • Doit être fait une seule fois (singleton)
  • Peut être encapsulé dans une classe AppDatabase.getInstance()
Bases de données locales (Partie 1)

Résumé

  • Room simplifie l'accès aux données locales.
  • Composants clés : Entity, DAO, Database.
  • Utilisation des annotations pour éviter le SQL manuel.
  • Prépare l'intégration avec LiveData et ViewModel.
Bases de données locales (Partie 1)

Ressources

Bases de données locales (Partie 1)