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

Tendances

softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
ENSET, Université Hassan II Casablanca
 
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurApplications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateur
Ahmed-Chawki Chaouche
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
ENSET, Université Hassan II Casablanca
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
ENSET, Université Hassan II Casablanca
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
ENSET, Université Hassan II Casablanca
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
IdrissaDembl
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
ENSET, Université Hassan II Casablanca
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Mehdi Hamime
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
ENSET, Université Hassan II Casablanca
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
ENSET, Université Hassan II Casablanca
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
Youness Boukouchi
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
Lilia Sfaxi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
ENSET, Université Hassan II Casablanca
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
ENSET, Université Hassan II Casablanca
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
ENSET, Université Hassan II Casablanca
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
Amal Abid
 

Tendances (20)

softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurApplications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateur
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 

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

3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
FethiBenYahia1
 
Applications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage JavaApplications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage Java
Ahmed-Chawki Chaouche
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
Laurent BUNIET
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
ENSET, Université Hassan II Casablanca
 
Applications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services WebApplications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services Web
Ahmed-Chawki Chaouche
 
Applications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobilesApplications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobiles
Ahmed-Chawki Chaouche
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
oumaimanouari
 
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
Antoine Rey
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
ENSET, Université Hassan II Casablanca
 
Sec109 Outils Et Ressources Securite
Sec109 Outils Et Ressources SecuriteSec109 Outils Et Ressources Securite
Sec109 Outils Et Ressources Securitegueste70933
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbc
Ines Ouaz
 
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et ConfigurerAlphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
Adyax
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
Yann Caron
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement AndroidSteve Tremblay
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications Web
Nicolas Hoffmann
 

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

3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
Applications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage JavaApplications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage Java
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
Applications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services WebApplications Android - cours 13 : Connectivité et services Web
Applications Android - cours 13 : Connectivité et services Web
 
Applications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobilesApplications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobiles
 
PHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiquesPHP_partie_.ppt,php_cours_mathematiques_informatiques
PHP_partie_.ppt,php_cours_mathematiques_informatiques
 
chapitre 1 Android 2.pptx
chapitre 1 Android 2.pptxchapitre 1 Android 2.pptx
chapitre 1 Android 2.pptx
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Sec109 Outils Et Ressources Securite
Sec109 Outils Et Ressources SecuriteSec109 Outils Et Ressources Securite
Sec109 Outils Et Ressources Securite
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbc
 
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et ConfigurerAlphorm.com Formation Informatica PowerCenter : Installer et Configurer
Alphorm.com Formation Informatica PowerCenter : Installer et Configurer
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Introduction au développement Android
Introduction au développement AndroidIntroduction au développement Android
Introduction au développement Android
 
jQuery Mobile & Applications Web
jQuery Mobile & Applications WebjQuery Mobile & Applications Web
jQuery Mobile & Applications Web
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 

Dernier

Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
GiselaAlves15
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
Txaruka
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
schneiderbeatrice78
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
frizzole
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
MedBechir
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
elfangourabdelouahab
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
BenotGeorges3
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
Moukagni Evrard
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Formation
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
bibliogard
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
IES Turina/Rodrigo/Itaca/Palomeras
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
MelDjobo
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
Txaruka
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
Txaruka
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
bangalykaba146
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
LamoussaPaulOuattara1
 

Dernier (16)

Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
 

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.