Section 1 : SQLite3 en ligne de commande¶
Cette section vous apprendra à utiliser l'interface en ligne de commande sqlite3 pour créer et manipuler des bases de données. Ces compétences sont essentielles pour :
- Déboguer les bases de données de vos applications Android
- Tester vos requêtes SQL avant de les intégrer dans Room
- Analyser les données stockées sur les appareils
- Prototyper rapidement des schémas de base de données
Lien avec Android
Les commandes que vous apprendrez ici peuvent être utilisées via ADB pour inspecter les bases de données de vos applications Android en cours de développement.
1.1 Installation de sqlite3¶
- Téléchargez les binaires depuis sqlite.org/download.html
- Recherchez "Precompiled Binaries for Windows"
- Téléchargez
sqlite-tools-win32-x86-*.zip - Extrayez le fichier et ajoutez le répertoire au PATH
Ajouter au PATH sous Windows
- Copiez le chemin du dossier contenant
sqlite3.exe - Recherchez "Variables d'environnement" dans le menu Démarrer
- Modifiez la variable
Path - Ajoutez le chemin copié
SQLite3 est généralement préinstallé sur macOS. Sinon :
Vérification de l'installation¶
Bonus : sqlite3 avec Android¶
Déboguer une base Android
Une fois que vous développerez des applications Android, vous pourrez utiliser sqlite3 pour inspecter vos bases de données directement depuis l'appareil :
1 2 3 4 5 6 7 8 9 10 11 12 | |
Commandes système sqlite3¶
Les commandes système commencent par un point (.) :
| Commande | Description |
|---|---|
.help |
Affiche l'aide complète |
.databases |
Liste les bases de données attachées |
.tables |
Liste toutes les tables |
.schema |
Affiche le schéma de toutes les tables |
.schema TABLE |
Affiche le schéma d'une table spécifique |
.quit ou .exit |
Quitte sqlite3 |
.mode MODE |
Change le mode d'affichage (column, csv, etc.) |
.headers on/off |
Affiche/masque les en-têtes de colonnes |
.output FILE |
Redirige la sortie vers un fichier |
Astuce : Configuration d'affichage
Pour une meilleure lisibilité, utilisez :
1.3 Création de tables¶
Exercice 1 : Créer une base de données pour une application mobile de gestion de tâches
Nous allons créer une base de données, todo.db, typique d'une application Android de gestion de tâches (To-Do app), similaire à ce que vous implémenterez avec Room dans les prochains TPs.
Table Tasks (Tâches)¶
Mise à jour automatique de updated_at
Dans les exemples ci-dessus, nous mettons à jour updated_at manuellement. Pour une approche plus robuste, vous pouvez créer un trigger SQLite qui met à jour automatiquement ce champ :
Avec ce trigger :
Équivalent Room
Room ne supporte pas directement les triggers, mais vous pouvez obtenir le même comportement avec @PreUpdate :
Explications - Pattern Android
INTEGER PRIMARY KEY AUTOINCREMENT: Identifiant unique (comme dans Room)TEXT NOT NULL: Champ obligatoireCHECK(priority IN (...)): Validation des valeurs (équivalent à un enum)INTEGERpour les booléens : Convention SQLite/Android (0=false, 1=true)- Timestamps avec
DEFAULT CURRENT_TIMESTAMP
Table Categories¶
Design mobile
Stockez les couleurs en hexadécimal (#RRGGBB) et les icônes par nom pour faciliter l'affichage dans Android
Table TaskCategory (Relation N:M)¶
Relation plusieurs-à-plusieurs
- Table de jointure (junction table) comme dans Room
PRIMARY KEYcomposite sur les deux colonnesON DELETE CASCADE: Suppression en cascade (automatique dans Room)
Vérifier la structure¶
Comprendre la sortie de PRAGMA table_info
Le résultat de PRAGMA table_info(Tasks) affiche les détails de chaque colonne dans l'ordre suivant :
| Position | Signification | Description |
|---|---|---|
| 0 | cid |
Column ID : Position de la colonne (commence à 0) |
| 1 | name |
Nom de la colonne |
| 2 | type |
Type de données (INTEGER, TEXT, etc.) |
| 3 | notnull |
0 = NULL autorisé, 1 = NOT NULL obligatoire |
| 4 | dflt_value |
Valeur par défaut (ou vide si aucune) |
| 5 | pk |
Clé primaire : 1 si PRIMARY KEY, 0 sinon |
Exemple avec la colonne title :
- Position 1 dans la table
- Nom : title
- Type : TEXT
- NOT NULL obligatoire (1)
- Pas de valeur par défaut (vide)
- Pas une clé primaire (0)
Exemple avec la colonne id :
- Position 0 (première colonne)
- Type INTEGER
- NULL autorisé (0) mais ignoré car c'est une PRIMARY KEY
- Clé primaire (1)
1.4 Insertion de données¶
Exercice 2 : Insérer des données de test
Insérer des catégories¶
Insérer des tâches¶
Lier les tâches aux catégories¶
1.5 Requêtes SELECT¶
Exercice 3 : Interroger les données
Configuration de l'affichage¶
Requêtes simples (typiques dans une app mobile)¶
1.6 Jointures¶
Exercice 4 : Requêtes avec jointures (pattern courant dans Room)
Liste des tâches avec leurs catégories¶
Équivalent Room
Cette requête correspond à une relation @Relation dans Room avec @Embedded
Statistiques par catégorie¶
Tâches en retard (fonctionnalité de notification)¶
Cas d'usage Android
Cette requête serait utilisée pour :
- Afficher des notifications de rappel
- Mettre en évidence les tâches en retard dans l'UI
- Calculer des statistiques de productivité
1.7 Mise à jour et suppression¶
Exercice 5 : Modifier les données (opérations typiques dans une app)
Marquer une tâche comme terminée¶
Modifier la priorité d'une tâche¶
Supprimer une tâche terminée¶
Attention : CASCADE
Pattern Android
Dans Room, ces opérations seraient gérées par des DAO :
1.8 Transactions¶
Exercice 6 : Utiliser les transactions (critiques pour Android)
Les transactions garantissent que plusieurs opérations s'exécutent ensemble ou pas du tout. Essentielles pour maintenir la cohérence des données dans une app mobile.
Transactions dans Room
Room gère automatiquement les transactions :
Les annotations @Insert, @Update, @Delete utilisent des transactions par défaut.
1.9 Export de données¶
Exercice 7 : Exporter les données
Export en CSV (pour analyse ou backup)¶
Export SQL complet (migration ou partage)¶
Cas d'usage Android
- Backup utilisateur : Exporter les données avant réinitialisation
- Debug : Analyser la base extraite d'un appareil
- Migration : Transférer des données entre versions d'app
Bonus : Extraire une base d'un appareil Android (pour plus tard)¶
À utiliser dans les prochains TPs
Cette section vous sera utile lorsque vous développerez vos propres applications Android avec Room. Pour l'instant, vous pouvez la lire pour comprendre le workflow, mais vous l'appliquerez concrètement dans les TPs suivants.
Installation d'ADB (Android Debug Bridge)¶
ADB est l'outil officiel pour communiquer avec des appareils Android depuis votre ordinateur.
- Téléchargez Android Platform Tools
- Extrayez le fichier ZIP dans
C:\platform-tools - Ajoutez
C:\platform-toolsau PATH (voir instructions sqlite3) - Vérifiez :
adb --version
Extraire la base de données d'une app¶
Une fois que vous aurez créé votre propre application Android :
Exemple concret (pour vos futurs TPs)
Imaginez que vous développez une app de tâches avec le package com.votregroupe.todoapp :
Félicitations !
Vous avez terminé la section 1 ! Vous savez maintenant créer et manipuler des bases SQLite adaptées aux applications mobiles.
Prochaines étapes¶
-
Section 2 : DB Browser
Continuez avec l'outil graphique