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

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
 
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
 
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
 
Architecture des Systèmes Logiciels
Architecture des Systèmes LogicielsArchitecture des Systèmes Logiciels
Architecture des Systèmes LogicielsGhazouani Mahdi
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 
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
 
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
 
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 dependancesENSET, Université Hassan II Casablanca
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptionsAmir Souissi
 
Administration des base de donnees sous oracle 10g
Administration des base de donnees sous oracle 10g Administration des base de donnees sous oracle 10g
Administration des base de donnees sous oracle 10g noble Bajoli
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesMohammed Amine Mostefai
 

Tendances (20)

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
 
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
 
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
 
Architecture des Systèmes Logiciels
Architecture des Systèmes LogicielsArchitecture des Systèmes Logiciels
Architecture des Systèmes Logiciels
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
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
 
Applications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateurApplications Android - cours 10 : Vues à adaptateur
Applications Android - cours 10 : Vues à adaptateur
 
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...
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
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
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
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 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
Administration des base de donnees sous oracle 10g
Administration des base de donnees sous oracle 10g Administration des base de donnees sous oracle 10g
Administration des base de donnees sous oracle 10g
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
 

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

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 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
 
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
 
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
 
#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
 
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 WebNicolas 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
 
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
 
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
 
#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
 
1145709.ppt
1145709.ppt1145709.ppt
1145709.ppt
 

Dernier

Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxrababouerdighi
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxAsmaa105193
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxMartin M Flynn
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxmmatar2
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 

Dernier (20)

Présentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptxPrésentation_ Didactique 1_SVT (S4) complet.pptx
Présentation_ Didactique 1_SVT (S4) complet.pptx
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Evaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. MarocpptxEvaluation du systeme d'Education. Marocpptx
Evaluation du systeme d'Education. Marocpptx
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Saint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptxSaint Georges, martyr, et la lègend du dragon.pptx
Saint Georges, martyr, et la lègend du dragon.pptx
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
le present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptxle present des verbes reguliers -er.pptx
le present des verbes reguliers -er.pptx
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 

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.