SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
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

Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
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
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Faycel Chaoua
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurApplications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurAhmed-Chawki Chaouche
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 
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.youssfiENSET, Université Hassan II Casablanca
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
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
 

Tendances (20)

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
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
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 JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Struts
StrutsStruts
Struts
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurApplications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateur
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
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
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
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...
 

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

Applications Android - cours 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet AndroidAhmed-Chawki Chaouche
 
Applications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage JavaApplications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage JavaAhmed-Chawki Chaouche
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
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.2Laurent BUNIET
 
Applications Android - cours 9 : Intents et transfert des données
Applications Android - cours 9 : Intents et transfert des donnéesApplications Android - cours 9 : Intents et transfert des données
Applications Android - cours 9 : Intents et transfert des donnéesAhmed-Chawki Chaouche
 
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 WebAhmed-Chawki Chaouche
 
Applications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobilesApplications Android - Cours 2 : OS mobiles
Applications Android - Cours 2 : OS mobilesAhmed-Chawki Chaouche
 
Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)Ahmed-Chawki Chaouche
 
#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 CodeIgniterAtsé François-Xavier KOBON
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
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 jdbcInes 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 ConfigurerAlphorm
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 

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 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet Android
 
Applications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage JavaApplications Android - cours 4 : Langage Java
Applications Android - cours 4 : Langage Java
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
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
 
Applications Android - cours 9 : Intents et transfert des données
Applications Android - cours 9 : Intents et transfert des donnéesApplications Android - cours 9 : Intents et transfert des données
Applications Android - cours 9 : Intents et transfert des données
 
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
 
Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)
 
#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
 
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 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
 

Dernier

Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film françaisTxaruka
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxMartin M Flynn
 
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24BenotGeorges3
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 37
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfbdp12
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursStagiaireLearningmat
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 37
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Gabriel Gay-Para
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film françaisTxaruka
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneTxaruka
 
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 37
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxJCAC
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfSylvianeBachy
 

Dernier (18)

Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film français
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
 
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceurs
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film français
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienne
 
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
 
Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
 

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.