SlideShare une entreprise Scribd logo
Université Constantine 2
Dr. CHAOUCHE A.-C.
Faculté des nouvelles technologies
ahmed.chaouche@univ-constantine2.dz
– Cours 12 –
Chapitre 8 : Persistance de données sous Android
Base de données SQLite
Développement d’applications mobiles
2018/2019. Semestre 1
Université Constantine 2
Etudiants concernés
Faculté/Institut Département Niveau Spécialité
2018/2019. Semestre 1
Dr. CHAOUCHE A.-C.
Faculté des nouvelles technologies
ahmed.chaouche@univ-constantine2.dz
Développement d’applications mobiles
Licence 3 Technologies de l’information (TI)Nouvelles technologies IFA
Licence 3 Science de l’informatique (SCI)Nouvelles technologies IFA
– Cours 12 –
Chapitre 8 : Persistance de données sous Android
Base de données SQLite
Université Constantine 2 3
Prérequis
Maîtrise de la programmation Android
Maîtrise du langage SQL
Objectifs du cours
Connaître les sources de données possibles sous Android
Mettre en œuvre l’API Helper pour exploiter une BD SQLite
Persister des données dans une BD SQLite
Résumé
© Dr. Chaouche A.-C.
Université Constantine 2 4
Fichiers bruts
java.io.*
Préférences partagées
android.content.SharedPreferences
Bases de données SQLite
android.database.sqlite.SQLiteOpenHelper
Fournisseurs de contenu
android.content.ContentProvider
Stockage dans un cloud
Voir Chapitre 9 (Bonus)
Stockage de données sous Android
© Dr. Chaouche A.-C.
Université Constantine 2 5
Les principaux SGBD relationnels :
MySQL, PostgreSQL
SQL Server, Oracle
SQLite, Access
Les SGBD objet :
Oracle, SQL Server, Informix, IBM
Les SGBD NoSQL :
Cassandra, Redis, MongoDB
Types de SGBDs
© Dr. Chaouche A.-C.
Une BD relationnelle est organisée dans des
tableaux à deux dimensions appelés des
relations ou tables. Elle est structurée suivant
les principes de l’algèbre relationnelle.
Une BD à objets est un stock d'informations
groupées sous formes de collections d'objets
persistants.
Une BD NoSQL (Not only SQL) n'est pas fondée
sur une architecture relationnelle. Elle
manipule généralement des BigData, tels que
Google, Amazon, Facebook ou eBay.
Université Constantine 2 6
un SGBD relationnel open source
embarqué (Android, iOS, Symbian OS, …)
stocké dans un fichier
le plus distribué dans le monde (Firefox, Skype, Google Gears, …)
léger et sans dépendances externes
ne nécessite que peu de mémoire lors de l’exécution ( <300 Ko)
pas de configuration et pas de gestion des droits d’accès
supporte le langage SQL (+ requêtes préparées)
SQLite (1/2)
© Dr. Chaouche A.-C.
Université Constantine 2 7
ne supporte que les types primitifs : INTEGER, REAL, TEXT, et BLOB
dépend du système de fichier (FAT32, NTFS, …)
pas d'extension propre (les plus utilisées : *.sqlite et *.db)
la BD est sauvegardée dans le stockage interne
privée à l’application (inaccessibles à partir d’autres applications)
par exemple dans
Nexus 5 : /data/user/0/[APP_NAME]/databases/FILE_NAME.db
Samsung : /data/data/[APP_NAME]/databases/FILE_NAME.db
SQLite (2/2)
© Dr. Chaouche A.-C.
Université Constantine 2 8
Le langage SQL permet d’interroger une BD SQLite
Les commandes SQL supportées par SQLite :
Donnés (ordres LMD) : SELECT, INSERT, UPDATE, DELETE
Tables (ordres LDD) : CREATE, RENAME, ALTER, TRUNCATE, DROP
SQL : Structured Query Language
© Dr. Chaouche A.-C.
Université Constantine 2 9
INTEGER :
entiers signés, stockés sur 1, 2, 3, 4, 6, ou 8 octets
REAL :
valeurs flottantes, stockés sur 8 octets
TEXT :
strings, stockés en utilisant l’encodage de la BD (UTF-8, UTF-16BE or UTF-16LE)
BLOB :
blobs de données (objets binaires), stockés exactement comme elles étaient
entrées dans la BD (limités à 1 Mo)
Types de données
© Dr. Chaouche A.-C.
Université Constantine 2 10
Android fournit une classe d'assistance qui aide l’utilisateur à créer et
manipuler une BD SQLite de manière simple
Création de la BD
La classe abstraite SQLiteOpenHelper : permet de gérer la connexion à
la base, la création des tables, et la gestion des versions
Méthodes abstraites : onCreate(…), onUpgrate(…)
Manipulation de la BD
La classe SQLiteDatabase : instance depuis getReadableDatabase()
ou getWriteableDatabase()
Méthodes : execSQL(…), insert(…), update(…), delete(…), rawQuery(…)
résultats de requête : Cursor.moveToNext()
SQLite sous Android
© Dr. Chaouche A.-C.
Université Constantine 2 11
Étapes de la persistance :
1. Créer le modèle de données (entités Module, Week et Course)
2. Étendre la classe SQLiteOpenHelper
a. Implémenter le constructeur
b. Implémenter la méthode onCreate()
c. Implémenter la méthode onUpgrade()
3. Implémenter les opérations CRUD
(Create, Read, Update, Delete)
4. Fermer la connexion à la BD
5. Manipuler la BD dans une activité
Persistance de données dans une BD SQLite
© Dr. Chaouche A.-C.
Université Constantine 2 12
Persistance de données dans une BD SQLite
1. Créer le modèle de données
© Dr. Chaouche A.-C.
/java/Module.java
public class Module {
int id; ...
List<Week> weeks;
}
/java/Week.java
public class Week {
int id; ...
List<Course> courses;
}
/java/Course.java
public class Course {
int id; ...
}
Université Constantine 2 13
Persistance de données dans une BD SQLite
2. Étendre la classe SQLiteOpenHelper
© Dr. Chaouche A.-C.
/java/MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) { ... }
@Override
public void onCreate(SQLiteDatabase db) { ... }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) { ... }
}
a
b
c
Université Constantine 2 14
Persistance de données dans une BD SQLite
2.a. Implémenter le Constructeur
© Dr. Chaouche A.-C.
/java/MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "database.db";
public static final int VERSION = 1;
public MyHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
} CursorFactory
...
}
Université Constantine 2 15
Persistance de données dans une BD SQLite
2.b. Implémenter la méthode onCreate()
© Dr. Chaouche A.-C.
/java/MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
...
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE module
(id INTEGER PRIMARY KEY AUTOINCREMENT,
accronym TEXT,
name TEXT,
description TEXT,
credit INTEGER )");
}
...
}
Université Constantine 2 16
Persistance de données dans une BD SQLite
2.c. Implémenter la méthode onUpgrade()
© Dr. Chaouche A.-C.
/java/MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
...
@Override
public void onUpgrade(SQLiteDatabase db,
int oldVersion,
int newVersion){
db.execSQL("DROP TABLE IF EXISTS module");
onCreate(db);
}
...
}
Université Constantine 2 17
Persistance de données dans une BD SQLite
3. Implémenter les opérations CRUD
© Dr. Chaouche A.-C.
/java/MyHelper.java
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) { ... }
public void onCreate(SQLiteDatabase db) { ... }
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer){...}
public void createModule(Module m) { ... }
public int updateModule(Module m) { ... }
public int deleteModule(Module m) { ... }
public Module getModule(long moduleId) { ... }
public List<Module> getAllModules() { ... }
public void closeDB() { ... }
}
CRUD : Create, Read, Update et Delete
Université Constantine 2 18
Persistance de données dans une BD SQLite
3.a. Create : Insérer un nouveau module
© Dr. Chaouche A.-C.
/java/MyHelper.java
public void createModule(Module m) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", m.name);
values.put("acronym", s.acronym);
...
nullColumnHack
db.insert("module", null, values);
⇔ db.execSQL("insert into store(name, ...) values('...', ...)");
}
Université Constantine 2 19
Persistance de données dans une BD SQLite
3.b. Update : Mettre à jour un module
© Dr. Chaouche A.-C.
/java/MyHelper.java
public int updateModule(Module m) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("accronym", m.accronym);
...
return db.update("module", values, "id = ?",
new String[] {m.id + "" });
}
Université Constantine 2 20
Persistance de données dans une BD SQLite
3.c. Delete : Supprimer un module
© Dr. Chaouche A.-C.
/java/MyHelper.java
public int deleteModule(Module m) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete("module", "id = ?",
new String[] { m.id + "" });
}
Université Constantine 2 21
Persistance de données dans une BD SQLite
3.d. Read : Extraire un module
© Dr. Chaouche A.-C.
/java/MyHelper.java
public Module getModule(long moduleId) {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM module WHERE id = " + moduleId;
Cursor cursor = db.rawQuery(selectQuery, null);
if(cursor == null) nullColumnHack
return null;
cursor.moveToFirst();
Module m = new Module();
m.id = cursor.getLong(cursor.getColumnIndex("id"));
m.name = (cursor.getString(cursor.getColumnIndex("name")));
...
return m;
}
Université Constantine 2 22
Persistance de données dans une BD SQLite
3.e. Read : Extraire tous les modules
© Dr. Chaouche A.-C.
/java/MyHelper.java
public List<Module> getAllModules() {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM module";
List<Module> modules = new ArrayList<>();
Cursor cursor = db.rawQuery(selectQuery, null);
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
modules.add(new Module(cursor.getLong(0), cursor.getString(1),
cursor.getString(2), cursor.getString(3),
cursor.getString(4)));
cursor.moveToNext();
}
return modules;
}
Université Constantine 2 23
Persistance de données dans une BD SQLite
4. Fermer la connexion à la BD
© Dr. Chaouche A.-C.
/java/MyHelper.java
public void closeDB() {
SQLiteDatabase db = this.getReadableDatabase();
if(db != null && db.isOpen())
db.close();
}
Université Constantine 2 24
Persistance de données dans une BD SQLite
5. Manipuler la BD dans une activité
© Dr. Chaouche A.-C.
/java/MainActivity.java
...
MyHelper myHelper = new MyHelper(getApplicationContext());
Module dam = new Module(...);
myHelper.createModule(dam);
...
List<Module> modules = myHelper.getAllModules();
for(Module m : modules){ Log.i("MainActivity", m.name); }
...
dam.acronym = "IAM";
myHelper.updateModule(dam);
...
myHelper.deleteModule(dam);
myHelper.closeDB();
Université Constantine 2 25
Aller plus loin…
Persister une association one-to-many
© Dr. Chaouche A.-C.
/java/MyHelper.java
public void createModule(Module m) {
...
for (Week w : m.weeks) {
createWeek(w);
}
...
}
Université Constantine 2 26
Accès externe à la BD ?
© Dr. Chaouche A.-C.
Université Constantine 2 27
Accès externe à la BD ?
Avec Root
© Dr. Chaouche A.-C.
Université Constantine 2 28
Accès externe à la BD ?
Sans Root via adb shell
© Dr. Chaouche A.-C.
Invité de commande
C:>Androidsdkplatform-tools> adb shell
shell@android: ls –al
...
shell@android: cd data/user/
opendir failed, Permission denied
shell@android: run-as sci.iam.learnapp ls –l
/data/user/sci.iam.learnapp/databases/
... ... database.db
shell@android: run-as sci.iam.learnapp cp
/data/user/sci.iam.learnapp/databases/database.db
/storage/emulated/0/
shell@android: ls -al
... ... database.db
shell@android: exit
C:>Androidsdkplatform-tools> adb pull
/storage/emulated/0/database.db c:
Université Constantine 2 29
SQLScout
https://www.idescout.com
Plugin Android Studio
Payant (~ 50$)
SQLite Studio
https://sqlitestudio.pl/
Sous Windows
ES Explorateur de fichiers
https://play.google.com/
Sous Android
Accès en mode Root
Clients SQLite
© Dr. Chaouche A.-C.
Université Constantine 2 30
Création d'une activité ContentActivity
Un RecyclerView pour afficher les semaines
Le layout de chaque semaine est englobé dans
CardView
Tutoriel (RecyclerView + CardView) :
https://www.androidhive.info/2016/01/android-working-
with-recycler-view/
TP4 : Affichage du contenu d’un module (1/3)
© Dr. Chaouche A.-C.
Université Constantine 2 31
TP4 : Affichage du contenu d’un module (2/3)
© Dr. Chaouche A.-C.
/java/Module.java
public class Week {
int id;
String description;
Date beginDate;
Date endDate;
List<Course> courses;
...
public Week(int id,...){
this.id = id;
...
}
}
/res/layout/item_module.xml
/java/WeekAdapter.java
...
Université Constantine 2 32
TP4 : Affichage du contenu d’un module (3/3)
Ouvrir un lien dans "Chrome"
© Dr. Chaouche A.-C.
/java/CententActivity.java
...
String urlString = "...";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage("com.android.chrome");
try {
startActivity(intent);
} catch (ActivityNotFoundException ex) {
// Chrome browser presumably not installed so allow user to choose instead
intent.setPackage(null);
startActivity(intent);
}
Université Constantine 2 33
Documents sont accessibles :
Plateforme e-learning de l’université Constantine 2
Lien : http://elearning.univ-constantine2.dz/
Rendus du TP 4 :
Avant le Samedi 4 janvier à 23h59
À : ac.chaouche@misc-umc.org
Nom du fichier à rendre :
DAM_TP4_G%_NOMBINOME1_NOMBINOME2.zip
(Ex : DAM_TP4_G1_CHAOUCHE_NECIBI.zip)
Le fichier zip doit contenir seulement le dossier src
Documents et Rendus
© Dr. Chaouche A.-C.
Université Constantine 2 34
BD SQLite :
www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/
SQLite Studio (sous Windows)
https://sqlitestudio.pl/
Utilisation de RecyclerView :
https://www.androidhive.info/2016/01/android-working-with-recycler-view/
Quelques liens utiles
© Dr. Chaouche A.-C.
Université Constantine 2 35
M. Seguy, «Tutoriel Android : apprendre à gérer les fichiers,» 15 Février 2016.
Lien: http://mathias-seguy.developpez.com/tutoriels/android/gerer-fichiers-
applications/.
F. Champigny, «Sauvegarder des éléments – SharedPreferences,» 20 Août 2015.
Lien : http://tutos-android-france.com/sharedpreferences/.
L. Vogel, «Tutoriel sur l'utilisation de base de données SQLite sous Android,» 19
Août 2013. Lien : http://vogella.developpez.com/tutoriels/ android/utilisation-
base-donnees-sqlite/.
W3ii.com, «Android Content Providers,» 2016. Lien :
http://www.w3ii.com/android/android_content_providers.html.
Références
© Dr. Chaouche A.-C.

Contenu connexe

PDF
Applications Android - cours 6 : Structure d’un projet Android
PPTX
cours Android.pptx
PDF
Cours PM.pdf programmation mobile en utilisant kotlin
PDF
Applications Android - cours 3 : Android Studio (Outil de développement)
PDF
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
PDF
Cours java
PDF
résumé POO java .pdf
PDF
P1 introduction à android
Applications Android - cours 6 : Structure d’un projet Android
cours Android.pptx
Cours PM.pdf programmation mobile en utilisant kotlin
Applications Android - cours 3 : Android Studio (Outil de développement)
Rapport j2ee: Gestion d’un compte bancaire En utilisant les EJB 3.0
Cours java
résumé POO java .pdf
P1 introduction à android

Tendances (20)

PDF
Applications Android - cours 11 : Boites de dialogue
PDF
Support JEE Servlet Jsp MVC M.Youssfi
PDF
Support de cours Spring M.youssfi
PDF
Cours design pattern m youssfi partie 6 proxy
PDF
Support Java Avancé Troisième Partie
PDF
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
PDF
Appalications JEE avec Servlet/JSP
PDF
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
PDF
Cours complet Base de donne Bac
PDF
Correction Examen 2016-2017 POO .pdf
PDF
Architecture jee principe de inversion de controle et injection des dependances
PDF
Support POO Java Deuxième Partie
PDF
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
PDF
Support developpement applications mobiles avec ionic v3 et v4
PPTX
Le passage du diagramme de classe vers le model objet relationnel
PPTX
Design patterns : résumé
PPTX
Chp2 - Les Entrepôts de Données
PDF
Support programmation orientée aspect mohamed youssfi (aop)
PDF
Sécurité des Applications Web avec Json Web Token (JWT)
PPSX
Formation JAVA/J2EE
Applications Android - cours 11 : Boites de dialogue
Support JEE Servlet Jsp MVC M.Youssfi
Support de cours Spring M.youssfi
Cours design pattern m youssfi partie 6 proxy
Support Java Avancé Troisième Partie
Theses Soutenues sous Direction et Co-Direction du Pr YOUSSFI
Appalications JEE avec Servlet/JSP
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
Cours complet Base de donne Bac
Correction Examen 2016-2017 POO .pdf
Architecture jee principe de inversion de controle et injection des dependances
Support POO Java Deuxième Partie
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Support developpement applications mobiles avec ionic v3 et v4
Le passage du diagramme de classe vers le model objet relationnel
Design patterns : résumé
Chp2 - Les Entrepôts de Données
Support programmation orientée aspect mohamed youssfi (aop)
Sécurité des Applications Web avec Json Web Token (JWT)
Formation JAVA/J2EE
Publicité

Similaire à Applications Android - cours 12 : Persistance de données SQLite (20)

PDF
3-android.pdf
PDF
Bases de données sous Android.pdf
PPSX
3 shared preference_sq_lite
PDF
Android-Tp4: stockage
PDF
Android ORMLite
PDF
In01 - Programmation Android - 04 - databases
PDF
TP7_Master.pdf
PDF
TP7_Master.pdf
PDF
Programmation Android - 04 - Databases
PDF
P5 stockage
PDF
Chapitre 4 persistance des donnees
PPTX
Projet de fin d étude (1)
PPT
Presentation hibernate nfe103
PDF
La persistance des données : ORM et hibernate
PPTX
Jpa(1)
PPTX
Ado.net vs jpa
PDF
Atelier18
PDF
Embarquer une base de données locale dans vos logiciels et applications mobiles
PPT
Formation JPA Java persistence API
3-android.pdf
Bases de données sous Android.pdf
3 shared preference_sq_lite
Android-Tp4: stockage
Android ORMLite
In01 - Programmation Android - 04 - databases
TP7_Master.pdf
TP7_Master.pdf
Programmation Android - 04 - Databases
P5 stockage
Chapitre 4 persistance des donnees
Projet de fin d étude (1)
Presentation hibernate nfe103
La persistance des données : ORM et hibernate
Jpa(1)
Ado.net vs jpa
Atelier18
Embarquer une base de données locale dans vos logiciels et applications mobiles
Formation JPA Java persistence API
Publicité

Plus de Ahmed-Chawki Chaouche (10)

PDF
Applications Android - cours 13 : Connectivité et services Web
PDF
Applications Android - cours 10 : Vues à adaptateur
PDF
Applications Android - cours 9 : Intents et transfert des données
PDF
Applications Android - cours 8 : Gestion des évènements
PDF
Applications Android - cours 7 : Ressources et adaptation au matériel
PDF
Applications Android - cours 5 : Classe Object et Collections en Java
PDF
Applications Android - cours 4 : Langage Java
PDF
Applications Android - Cours 2 : OS mobiles
PDF
Applications Android - Cours 1 : Vers une informatique mobile et ambiante
PDF
Applications Android (Planning)
Applications Android - cours 13 : Connectivité et services Web
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 9 : Intents et transfert des données
Applications Android - cours 8 : Gestion des évènements
Applications Android - cours 7 : Ressources et adaptation au matériel
Applications Android - cours 5 : Classe Object et Collections en Java
Applications Android - cours 4 : Langage Java
Applications Android - Cours 2 : OS mobiles
Applications Android - Cours 1 : Vers une informatique mobile et ambiante
Applications Android (Planning)

Dernier (20)

PDF
🎓 Le Secret des Profs Captivants - 💡 3.1. Anatomie de la respiration — VOIX, ...
PPTX
Le rendez-vous de l'été.pptx Film français
PPTX
Leçon inaugurale2.ministere. enseignant.
PPTX
SESSION4-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPTX
Le rendez-vous de l'été.pptx Film français
PDF
rédigés - Spécialité: 📊 Mathématique - Extrait
PDF
Présentation de jfjjfnflfkfkfkhdbhdhhdhd
PPT
étude----- droit------ 2005---------.ppt
PPT
Formation ESPACESCONFINES_ Rôle et responsabilité.ppt
PPTX
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
PDF
CLASE 5 comparatifs en gfrnacaise clase 2
DOC
Vocabulaire pour la description II - Francais Free Lesson-
PPT
calcul---électrique--et--chutes de tension.ppt
PDF
585-developpement-d-une-application-avec-python-fr-en-business.pdf
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
PDF
Il y a et les lieux de la ville (négation avec les indéfinis)
PDF
CLASE 2 TRAIN voacublaire en rancaise.pdf
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - 📈 SES - Extrait
PPTX
BasicFrench_FINAL23 (1).Niveauxneuf9pptx
PPTX
requiredkjshajhsaalksasjashaaisj kajshakha
🎓 Le Secret des Profs Captivants - 💡 3.1. Anatomie de la respiration — VOIX, ...
Le rendez-vous de l'été.pptx Film français
Leçon inaugurale2.ministere. enseignant.
SESSION4-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Le rendez-vous de l'été.pptx Film français
rédigés - Spécialité: 📊 Mathématique - Extrait
Présentation de jfjjfnflfkfkfkhdbhdhhdhd
étude----- droit------ 2005---------.ppt
Formation ESPACESCONFINES_ Rôle et responsabilité.ppt
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
CLASE 5 comparatifs en gfrnacaise clase 2
Vocabulaire pour la description II - Francais Free Lesson-
calcul---électrique--et--chutes de tension.ppt
585-developpement-d-une-application-avec-python-fr-en-business.pdf
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
Il y a et les lieux de la ville (négation avec les indéfinis)
CLASE 2 TRAIN voacublaire en rancaise.pdf
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - 📈 SES - Extrait
BasicFrench_FINAL23 (1).Niveauxneuf9pptx
requiredkjshajhsaalksasjashaaisj kajshakha

Applications Android - cours 12 : Persistance de données SQLite

  • 1. Université Constantine 2 Dr. CHAOUCHE A.-C. Faculté des nouvelles technologies ahmed.chaouche@univ-constantine2.dz – Cours 12 – Chapitre 8 : Persistance de données sous Android Base de données SQLite Développement d’applications mobiles 2018/2019. Semestre 1
  • 2. Université Constantine 2 Etudiants concernés Faculté/Institut Département Niveau Spécialité 2018/2019. Semestre 1 Dr. CHAOUCHE A.-C. Faculté des nouvelles technologies ahmed.chaouche@univ-constantine2.dz Développement d’applications mobiles Licence 3 Technologies de l’information (TI)Nouvelles technologies IFA Licence 3 Science de l’informatique (SCI)Nouvelles technologies IFA – Cours 12 – Chapitre 8 : Persistance de données sous Android Base de données SQLite
  • 3. Université Constantine 2 3 Prérequis Maîtrise de la programmation Android Maîtrise du langage SQL Objectifs du cours Connaître les sources de données possibles sous Android Mettre en œuvre l’API Helper pour exploiter une BD SQLite Persister des données dans une BD SQLite Résumé © Dr. Chaouche A.-C.
  • 4. Université Constantine 2 4 Fichiers bruts java.io.* Préférences partagées android.content.SharedPreferences Bases de données SQLite android.database.sqlite.SQLiteOpenHelper Fournisseurs de contenu android.content.ContentProvider Stockage dans un cloud Voir Chapitre 9 (Bonus) Stockage de données sous Android © Dr. Chaouche A.-C.
  • 5. Université Constantine 2 5 Les principaux SGBD relationnels : MySQL, PostgreSQL SQL Server, Oracle SQLite, Access Les SGBD objet : Oracle, SQL Server, Informix, IBM Les SGBD NoSQL : Cassandra, Redis, MongoDB Types de SGBDs © Dr. Chaouche A.-C. Une BD relationnelle est organisée dans des tableaux à deux dimensions appelés des relations ou tables. Elle est structurée suivant les principes de l’algèbre relationnelle. Une BD à objets est un stock d'informations groupées sous formes de collections d'objets persistants. Une BD NoSQL (Not only SQL) n'est pas fondée sur une architecture relationnelle. Elle manipule généralement des BigData, tels que Google, Amazon, Facebook ou eBay.
  • 6. Université Constantine 2 6 un SGBD relationnel open source embarqué (Android, iOS, Symbian OS, …) stocké dans un fichier le plus distribué dans le monde (Firefox, Skype, Google Gears, …) léger et sans dépendances externes ne nécessite que peu de mémoire lors de l’exécution ( <300 Ko) pas de configuration et pas de gestion des droits d’accès supporte le langage SQL (+ requêtes préparées) SQLite (1/2) © Dr. Chaouche A.-C.
  • 7. Université Constantine 2 7 ne supporte que les types primitifs : INTEGER, REAL, TEXT, et BLOB dépend du système de fichier (FAT32, NTFS, …) pas d'extension propre (les plus utilisées : *.sqlite et *.db) la BD est sauvegardée dans le stockage interne privée à l’application (inaccessibles à partir d’autres applications) par exemple dans Nexus 5 : /data/user/0/[APP_NAME]/databases/FILE_NAME.db Samsung : /data/data/[APP_NAME]/databases/FILE_NAME.db SQLite (2/2) © Dr. Chaouche A.-C.
  • 8. Université Constantine 2 8 Le langage SQL permet d’interroger une BD SQLite Les commandes SQL supportées par SQLite : Donnés (ordres LMD) : SELECT, INSERT, UPDATE, DELETE Tables (ordres LDD) : CREATE, RENAME, ALTER, TRUNCATE, DROP SQL : Structured Query Language © Dr. Chaouche A.-C.
  • 9. Université Constantine 2 9 INTEGER : entiers signés, stockés sur 1, 2, 3, 4, 6, ou 8 octets REAL : valeurs flottantes, stockés sur 8 octets TEXT : strings, stockés en utilisant l’encodage de la BD (UTF-8, UTF-16BE or UTF-16LE) BLOB : blobs de données (objets binaires), stockés exactement comme elles étaient entrées dans la BD (limités à 1 Mo) Types de données © Dr. Chaouche A.-C.
  • 10. Université Constantine 2 10 Android fournit une classe d'assistance qui aide l’utilisateur à créer et manipuler une BD SQLite de manière simple Création de la BD La classe abstraite SQLiteOpenHelper : permet de gérer la connexion à la base, la création des tables, et la gestion des versions Méthodes abstraites : onCreate(…), onUpgrate(…) Manipulation de la BD La classe SQLiteDatabase : instance depuis getReadableDatabase() ou getWriteableDatabase() Méthodes : execSQL(…), insert(…), update(…), delete(…), rawQuery(…) résultats de requête : Cursor.moveToNext() SQLite sous Android © Dr. Chaouche A.-C.
  • 11. Université Constantine 2 11 Étapes de la persistance : 1. Créer le modèle de données (entités Module, Week et Course) 2. Étendre la classe SQLiteOpenHelper a. Implémenter le constructeur b. Implémenter la méthode onCreate() c. Implémenter la méthode onUpgrade() 3. Implémenter les opérations CRUD (Create, Read, Update, Delete) 4. Fermer la connexion à la BD 5. Manipuler la BD dans une activité Persistance de données dans une BD SQLite © Dr. Chaouche A.-C.
  • 12. Université Constantine 2 12 Persistance de données dans une BD SQLite 1. Créer le modèle de données © Dr. Chaouche A.-C. /java/Module.java public class Module { int id; ... List<Week> weeks; } /java/Week.java public class Week { int id; ... List<Course> courses; } /java/Course.java public class Course { int id; ... }
  • 13. Université Constantine 2 13 Persistance de données dans une BD SQLite 2. Étendre la classe SQLiteOpenHelper © Dr. Chaouche A.-C. /java/MyHelper.java public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { ... } @Override public void onCreate(SQLiteDatabase db) { ... } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ... } } a b c
  • 14. Université Constantine 2 14 Persistance de données dans une BD SQLite 2.a. Implémenter le Constructeur © Dr. Chaouche A.-C. /java/MyHelper.java public class MyHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "database.db"; public static final int VERSION = 1; public MyHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } CursorFactory ... }
  • 15. Université Constantine 2 15 Persistance de données dans une BD SQLite 2.b. Implémenter la méthode onCreate() © Dr. Chaouche A.-C. /java/MyHelper.java public class MyHelper extends SQLiteOpenHelper { ... @Override public void onCreate(SQLiteDatabase db){ db.execSQL("CREATE TABLE module (id INTEGER PRIMARY KEY AUTOINCREMENT, accronym TEXT, name TEXT, description TEXT, credit INTEGER )"); } ... }
  • 16. Université Constantine 2 16 Persistance de données dans une BD SQLite 2.c. Implémenter la méthode onUpgrade() © Dr. Chaouche A.-C. /java/MyHelper.java public class MyHelper extends SQLiteOpenHelper { ... @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ db.execSQL("DROP TABLE IF EXISTS module"); onCreate(db); } ... }
  • 17. Université Constantine 2 17 Persistance de données dans une BD SQLite 3. Implémenter les opérations CRUD © Dr. Chaouche A.-C. /java/MyHelper.java public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { ... } public void onCreate(SQLiteDatabase db) { ... } public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer){...} public void createModule(Module m) { ... } public int updateModule(Module m) { ... } public int deleteModule(Module m) { ... } public Module getModule(long moduleId) { ... } public List<Module> getAllModules() { ... } public void closeDB() { ... } } CRUD : Create, Read, Update et Delete
  • 18. Université Constantine 2 18 Persistance de données dans une BD SQLite 3.a. Create : Insérer un nouveau module © Dr. Chaouche A.-C. /java/MyHelper.java public void createModule(Module m) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", m.name); values.put("acronym", s.acronym); ... nullColumnHack db.insert("module", null, values); ⇔ db.execSQL("insert into store(name, ...) values('...', ...)"); }
  • 19. Université Constantine 2 19 Persistance de données dans une BD SQLite 3.b. Update : Mettre à jour un module © Dr. Chaouche A.-C. /java/MyHelper.java public int updateModule(Module m) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("accronym", m.accronym); ... return db.update("module", values, "id = ?", new String[] {m.id + "" }); }
  • 20. Université Constantine 2 20 Persistance de données dans une BD SQLite 3.c. Delete : Supprimer un module © Dr. Chaouche A.-C. /java/MyHelper.java public int deleteModule(Module m) { SQLiteDatabase db = this.getWritableDatabase(); return db.delete("module", "id = ?", new String[] { m.id + "" }); }
  • 21. Université Constantine 2 21 Persistance de données dans une BD SQLite 3.d. Read : Extraire un module © Dr. Chaouche A.-C. /java/MyHelper.java public Module getModule(long moduleId) { SQLiteDatabase db = this.getReadableDatabase(); String selectQuery = "SELECT * FROM module WHERE id = " + moduleId; Cursor cursor = db.rawQuery(selectQuery, null); if(cursor == null) nullColumnHack return null; cursor.moveToFirst(); Module m = new Module(); m.id = cursor.getLong(cursor.getColumnIndex("id")); m.name = (cursor.getString(cursor.getColumnIndex("name"))); ... return m; }
  • 22. Université Constantine 2 22 Persistance de données dans une BD SQLite 3.e. Read : Extraire tous les modules © Dr. Chaouche A.-C. /java/MyHelper.java public List<Module> getAllModules() { SQLiteDatabase db = this.getReadableDatabase(); String selectQuery = "SELECT * FROM module"; List<Module> modules = new ArrayList<>(); Cursor cursor = db.rawQuery(selectQuery, null); cursor.moveToFirst(); while(!cursor.isAfterLast()) { modules.add(new Module(cursor.getLong(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4))); cursor.moveToNext(); } return modules; }
  • 23. Université Constantine 2 23 Persistance de données dans une BD SQLite 4. Fermer la connexion à la BD © Dr. Chaouche A.-C. /java/MyHelper.java public void closeDB() { SQLiteDatabase db = this.getReadableDatabase(); if(db != null && db.isOpen()) db.close(); }
  • 24. Université Constantine 2 24 Persistance de données dans une BD SQLite 5. Manipuler la BD dans une activité © Dr. Chaouche A.-C. /java/MainActivity.java ... MyHelper myHelper = new MyHelper(getApplicationContext()); Module dam = new Module(...); myHelper.createModule(dam); ... List<Module> modules = myHelper.getAllModules(); for(Module m : modules){ Log.i("MainActivity", m.name); } ... dam.acronym = "IAM"; myHelper.updateModule(dam); ... myHelper.deleteModule(dam); myHelper.closeDB();
  • 25. Université Constantine 2 25 Aller plus loin… Persister une association one-to-many © Dr. Chaouche A.-C. /java/MyHelper.java public void createModule(Module m) { ... for (Week w : m.weeks) { createWeek(w); } ... }
  • 26. Université Constantine 2 26 Accès externe à la BD ? © Dr. Chaouche A.-C.
  • 27. Université Constantine 2 27 Accès externe à la BD ? Avec Root © Dr. Chaouche A.-C.
  • 28. Université Constantine 2 28 Accès externe à la BD ? Sans Root via adb shell © Dr. Chaouche A.-C. Invité de commande C:>Androidsdkplatform-tools> adb shell shell@android: ls –al ... shell@android: cd data/user/ opendir failed, Permission denied shell@android: run-as sci.iam.learnapp ls –l /data/user/sci.iam.learnapp/databases/ ... ... database.db shell@android: run-as sci.iam.learnapp cp /data/user/sci.iam.learnapp/databases/database.db /storage/emulated/0/ shell@android: ls -al ... ... database.db shell@android: exit C:>Androidsdkplatform-tools> adb pull /storage/emulated/0/database.db c:
  • 29. Université Constantine 2 29 SQLScout https://www.idescout.com Plugin Android Studio Payant (~ 50$) SQLite Studio https://sqlitestudio.pl/ Sous Windows ES Explorateur de fichiers https://play.google.com/ Sous Android Accès en mode Root Clients SQLite © Dr. Chaouche A.-C.
  • 30. Université Constantine 2 30 Création d'une activité ContentActivity Un RecyclerView pour afficher les semaines Le layout de chaque semaine est englobé dans CardView Tutoriel (RecyclerView + CardView) : https://www.androidhive.info/2016/01/android-working- with-recycler-view/ TP4 : Affichage du contenu d’un module (1/3) © Dr. Chaouche A.-C.
  • 31. Université Constantine 2 31 TP4 : Affichage du contenu d’un module (2/3) © Dr. Chaouche A.-C. /java/Module.java public class Week { int id; String description; Date beginDate; Date endDate; List<Course> courses; ... public Week(int id,...){ this.id = id; ... } } /res/layout/item_module.xml /java/WeekAdapter.java ...
  • 32. Université Constantine 2 32 TP4 : Affichage du contenu d’un module (3/3) Ouvrir un lien dans "Chrome" © Dr. Chaouche A.-C. /java/CententActivity.java ... String urlString = "..."; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setPackage("com.android.chrome"); try { startActivity(intent); } catch (ActivityNotFoundException ex) { // Chrome browser presumably not installed so allow user to choose instead intent.setPackage(null); startActivity(intent); }
  • 33. Université Constantine 2 33 Documents sont accessibles : Plateforme e-learning de l’université Constantine 2 Lien : http://elearning.univ-constantine2.dz/ Rendus du TP 4 : Avant le Samedi 4 janvier à 23h59 À : ac.chaouche@misc-umc.org Nom du fichier à rendre : DAM_TP4_G%_NOMBINOME1_NOMBINOME2.zip (Ex : DAM_TP4_G1_CHAOUCHE_NECIBI.zip) Le fichier zip doit contenir seulement le dossier src Documents et Rendus © Dr. Chaouche A.-C.
  • 34. Université Constantine 2 34 BD SQLite : www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/ SQLite Studio (sous Windows) https://sqlitestudio.pl/ Utilisation de RecyclerView : https://www.androidhive.info/2016/01/android-working-with-recycler-view/ Quelques liens utiles © Dr. Chaouche A.-C.
  • 35. Université Constantine 2 35 M. Seguy, «Tutoriel Android : apprendre à gérer les fichiers,» 15 Février 2016. Lien: http://mathias-seguy.developpez.com/tutoriels/android/gerer-fichiers- applications/. F. Champigny, «Sauvegarder des éléments – SharedPreferences,» 20 Août 2015. Lien : http://tutos-android-france.com/sharedpreferences/. L. Vogel, «Tutoriel sur l'utilisation de base de données SQLite sous Android,» 19 Août 2013. Lien : http://vogella.developpez.com/tutoriels/ android/utilisation- base-donnees-sqlite/. W3ii.com, «Android Content Providers,» 2016. Lien : http://www.w3ii.com/android/android_content_providers.html. Références © Dr. Chaouche A.-C.