Vous êtes sur la page 1sur 55

UF3: APPLICATIONS MOBILES (APM)

5ième Cours: Base de Données Mobile

Dr. MECHTA Djamila


 La plupart des applications mobiles nécessitent que les données
soient stockées, organisées et visualisées.

 Les applications plus complexes peuvent bénéficier d’une base de


données supportant:
 Organiser les données dans divers tables
 Fournir une recherche rapide en utilisant des index
 Représenter les relations entre les données de différentes tables via
des clés étrangères

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Le magasin des (Repository) données local stockées dans la
mémoire de l’appareil mobile, qui devrait de préférence:

 Télécharger et stocker des informations à partir du serveur


central/master (réplication)

 Propager les modifications (effectuées pendant la phase


déconnectée) vers le serveur central afin que la base de données
master soit mise à jour (synchronisation)

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Mode de fonctionnement déconnecté - la déconnexion est une
norme. Ce mode de fonctionnement est préférable pour conserver
une bande passante réseau et une durée de vie élevées.

 Réseau non fiable - L’accès au serveur doit être minimisé pour faire
face au taux d’erreur élevé dans un environnement mobile.

 Disponibilité limitée de la mémoire - les exigences de traitement


ne devraient pas imposer une charge importante aux ressources
système limitées…
4

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Les applications mobiles fonctionnent mieux lorsqu’elles incluent
une sorte de magasin de données local.

 Les opérations sur les données sont plus rapides et peuvent


survenir à tout moment.

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Le stockage permanent est un des périphériques de stockage de
données qui conserve les données après la mise hors tension de ce
dernier. Il est également parfois appelé stockage non volatile.

 La technologie de l’information permet la réutilisation d’objets


volatiles et d’autres éléments de données en les stockant dans un
système de stockage permanent tel que des fichiers de disque et des
bases de données.

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Shared Preferences (préférences partagées): Stocker des données
primitives privées dans des paires clé-valeur.

 Internal Storage (Stockage interne): Stocker des données privées


sur la mémoire principale de l’appareil.

 External Storage (Stockage externe): Stocker des données


publiques sur un support externe partagé.

 SQLite Databases (Base de données SQLite): Stocker des données


structurées localement (privé)

 Network Connection (Connexion réseau): Android permet 7de


stocker des fichiers sur un serveur distant.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
 On utilise pour cela la notion de « Bundle » et les

Artificial Intelligence a modern approach


différents cycles de l’activité pour sauvegarder
l’information utile à l’aide du « bundle » et
récupérer cette information dans un autre état de
l’activité.

 On ne peut utiliser qu’un seul bundle, par


ailleurs la donnée n’est pas persistante et n’est
disponible que tant que l’application est utilisée.
8

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Stockage interne :
 Toujours disponible

Artificial Intelligence a modern approach


 Par défaut, accessible uniquement par votre application
 Fichiers Supprimés à la désinstalla on de l’application
 Stockage externe :
 Pas toujours disponible (USB, etc.)
 Fichiers accessibles et modifiables par tout le monde
 Seuls les fichiers du répertoire getExternalFilesDir() sont
supprimés à la désinstalla on de l’application
 Nécessite des permissions
 Utile pour partager des données entre applications 9

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Il suffit d’ajouter les permissions dans le manifeste
de l’application :

Artificial Intelligence a modern approach


10

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Ces préférences seront accessibles aux différentes

Artificial Intelligence a modern approach


activités associées à l’application.

 Les préférences seront utilisées pour sauvegarder


l’état de la configuration de l’application ou bien les
données de session.

 Les préférences sont comme les « bundles » sauf


qu’elles sont persistantes ce qui n’est pas le cas des
bundles. 11

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Les préférences ne sont pas cryptées. Il faudra faire

Artificial Intelligence a modern approach


attention si l’intention est de préserver des données
critiques.

 Les préférences peuvent être effacées par l’utilisateur de


l’application.

 pour sauvegarder puis lire une préférence, il faut utiliser


les méthodes de la classe « SharedPreferences »
12

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Ces préférences sont gérées à travers un code Java ou

Artificial Intelligence a modern approach


bien via une activité.

 Les préférences sont adaptées pour des paires simples,


mais dès qu’il est question de données plus complexes,
il est préférable d’utiliser des fichiers (sauvegarder les
préférences dans un fichier).

13

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Les données de ce type de conteneur sont enregistrées en tant que
paires <Key, Value> où la clé est une chaîne et sa valeur associée
doit être un type de données primitif.

 Les données sont stockées dans la mémoire principale


interne de l’appareil.

 Ils sont généralement utilisés pour conserver les informations d’état


et les données partagées entre plusieurs activités d’une application.

 Les conteneurs SharedPreference sont enregistrés en tant que


fichiers XML dans l’espace mémoire interne de l’application.
14

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 L’accès aux préférences partagées
 Les préférences partagées peuvent être récupérées en utilisant la
méthode getSharedPreferences().
 Création & modification des préférences:
 Pour créer ou modifier des préférences, vous devez :
 Appeler la méthode edit() sur l’objet SharedPreferences.
 Une fois la valeur modifiée, vous devez appeler la méthode
apply() pour l’appliquer de façon asynchrone au système de
fichiers.
 L’utilisation de la méthode commit() est déconseillée, car elle
écrit de façon synchrone les changements apportés au système de
15
fichiers.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
 Tous les types de données primitifs, tels que les booléens,
les flottants, les ints, les longs et les chaînes, sont pris en

Artificial Intelligence a modern approach


charge.
 Vous devez mettre les données en clé avec valeur:
 editor.putBoolean("key_name", true); // Stockage booléen -
true/false
 editor.putString("key_name", "string value"); // Stockage string

 editor.putInt("key_name", "int value"); // Stockage integer

 editor.putFloat("key_name", "float value"); // Stockage float

 editor.putLong("key_name", "long value"); // Stockage long

16

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Commettre des modifications:
 commit(): Valide vos modifications de préférences depuis cet
éditeur vers l’objet SharedPreferences qu’il est en train de se
modifier.

 Récupération des valeurs des préférences:


 Récupérer à partir des préférences enregistrées.
 Demander SharedPreferences pas par l’éditeur.
 pref.getString("key_name", null); // Obtenir Une chaine

 pref.getInt("key_name", null); // Obtenir un entier

 pref.getFloat("key_name", null); // Obtenir un réel

 pref.getLong("key_name", null); // Obtenir Long


 pref.getBoolean("key_name", null); // Obtenir un booléen 17

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


Artificial Intelligence a modern approach
18

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Effacer/Supprimer des préférences:

 On peut détruire la préférence en détruisant la clé associée à


l’aide de la méthode remove(‘key_name’).
 On peut détruire toutes les préférences à l’aide de la méthode
clear () :
editor.removeString(Nom);
editor.clear();

19

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple:

20

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 La méthode getSharedPreferences(...) crée (ou extrait) une table
appelée fichier my_preferred_choices, en utilisant l’accès
MODE_PRIVATE par défaut. Dans ce mode d’accès, seule
l’application appelante peut fonctionner sur le fichier.

 Les conteneurs SharedPreference sont enregistrés en tant que


fichiers XML dans l’espace mémoire interne de l’application.

21

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Android offre aussi la possibilité d’utiliser toutes les propriétés
d’une base de données relationnelle.

 Android utilise pour cela une base de données basée sur « SQLite »
(www.sqlite.org).

 Android stocke la base de données localement à l’application.

 Si l’on veut partager cette structure de données avec d’autres


applications, il faudra utiliser dans ce cas, un gestionnaire de
contenu (content provider) configuré à cet effet. 22

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Les opérations sur la base de données se feront

Artificial Intelligence a modern approach


donc dans le même processus que l’application. Il
faudra faire attention aux opérations « lourdes
», votre application va ressentir les contres
coups. Il est conseillé dans ce cas d’utiliser
les tâches asynchrones (ou threads).
 Chaque application peut avoir donc ses propres
bases.
 Ces bases sont stockées dans le répertoire «
databases » associé à l’application
(/data/data/APP_NAME/databases/nom_base). 23

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Nous pouvons les stocker aussi sur une unité

Artificial Intelligence a modern approach


externe (sdcard).
 Chaque base créée, elle le sera en mode «
MODE_PRIVATE ». Aucune autre application ne
peut y accéder que l’application qui l’a créée.
 Pour y avoir accès, il faut que la base ait été
sauvegardée sur un support externe, sinon
utiliser le mécanisme d’échange de données
fourni par Android.
24

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Le SQLite peut être utilisé pour:
 Créer une base de données

Artificial Intelligence a modern approach


 Définir:
 Tables SQL
 indices
 Requêtes (queries)
 Vues (views)
 Déclencheurs (triggers)
 Insérer des lignes
 Supprimer les lignes
 Changer les lignes
 Administrer un fichier de base de données SQLite. 25

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 RDBMS: un système de gestion de base de données relationnelle
(DBMS).
 Standard-comliant: implémente la plupart des standards SQL.
 Zero configuration: disponible sur tous les appareils Android et ne
nécessite aucune administration de base de données.
 Lightweight: apporximativement 350 KB.
 Open-source: le code source pour SQLite est dans le domaine
public.
 Typeless: SQLite ne vérifie pas le typage des éléments. 26

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 C’est un système compact, très efficace pour les
systèmes embarqués. En effet, il utilise très peu de
mémoire.

Artificial Intelligence a modern approach


 SQLite ne nécessite pas de serveur pour fonctionner,
ce qui n’est pas le cas de MySQL par exemple.

27

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Action queries (requête Action) et Retrieval queries représentent
les opérations les plus courantes sur la base de données:

 Une requête Action effectue généralement des tâches de


maintenance et d’administration, telles que la manipulation de
tables, d’utilisateurs, d’environnement, etc.
 La méthode execSQL (...) manipule les requêtes d’action SQL.

 Une requête de récupération est généralement une commande SQL-


Select dans laquelle une table contenant un certain nombre de
champs et de lignes est produite en tant que réponse à une demande
28
de données.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
 Retrieval queries sont connues comme des instructions
SQL-select.
 Answers (résultats) produites par les requêtes de
récupération (Retrieval queries ) sont toujours
conservées dans une table.
 Afin de traiter les lignes de table résultantes, l’utilisateur
doit fournir un périphérique de curseur. Les curseurs
autorisent un mécanisme d’accès row-at-time sur les
tables SQL.
 rawQuery(): Exécute le code SQL fourni et renvoie un
29
curseur sur l’ensemble de résultats.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
 Création d’une table:

30

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Insertion:

31

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 La mise à jour d’un enregistrement:

 Suppression d’un enregistrement:

32

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple:

 Exemple:

 Quand .rawQuery() est appelé, le système lie chaque espace réservé vide
33
‘?’ avec la valeur args fournie.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
 Une autre solution pourrait être utilisée pour l’exemple précédent:

 Au lieu que les symboles ‘?’ Agissent comme des espaces réservés, nous
concaténons commodément les fragments de données nécessaires.
34

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Les curseurs sont utilisés pour obtenir un accès séquentiel et
aléatoire aux tables produites par les instructions SQL-select.
Les curseurs permettent de parcourir le résultat d’une requête :
 int getCount() ;
 boolean moveToFirst() ;
 boolean moveToNext() ;
 boolean moveToPosition(int position) ;
 int getColumnIndex(String columnName)
 String getString(int cId) , double getDouble(int cId) ;
 void close() ... 35

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Traverser un curseur (Traversing a cursor):

 moveToNext (): Déplacez le curseur sur la ligne suivante. Cette


méthode retournera false si le curseur est déjà passé la dernière
entrée dans le jeu de résultats. 36

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple:

37

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Comment stocker des infos structurées dans la
base de données ?

Artificial Intelligence a modern approach


Pour cela, nous allons :

 Définir un modèle de données (les tables) ;


 Représenter ce modèle sous la forme de classes ;

 Définir un SQL pour faciliter la création des tables ;

 Voir comment modifier, consulter les données.

38

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Il aide les développeurs non-SQL dans leur processus
d’interrogation d’une base de données.
 Les requêtes simples peuvent uniquement récupérer des données à
partir d’une seule table.
 La signature de la méthode SQLite .query est:

39

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple:

40

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple: sélection des colonnes: recID, nom et téléphone. La
condition à satisfaire est que recID doit être supérieur à 2, et les
noms doivent commencer par ‘B’ et avoir trois lettres ou plus.

41

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple: combien de groupes d’amis dont recID> 3 ont le même
nom. En outre, nous voulons que les groupes ‘nom’ ne comptent pas
plus de quatre personnes chacun:

42

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple: combien de groupes d’amis dont recID> 3 ont le même
nom. De plus, nous voulons voir des groupes de «nom» n’ayant pas
plus de quatre personnes chacun :

43

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Android fournit un certain nombre de méthodes supplémentaires
pour effectuer des opérations d’insertion, de suppression et de mise
à jour.
 Ils renvoient toutes des données de retour, telles que l’ID
d’enregistrement d’une ligne récemment insérée ou le nombre
d’enregistrements affectés par l’action.

44

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Cette classe est utilisée pour stocker un ensemble de paires [nom,
valeur].
 Lorsqu’elle est utilisé en combinaison avec SQLite, un objet
ContentValues ​est simplement un moyen pratique de transmettre un
nombre variable de paramètres aux fonctions d’action SQLite.
 Comme les bundles, cette classe prend en charge un groupe de
méthodes put/get pour déplacer des données dans/hors du
conteneur.

45

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


46

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


1. Un ensemble de <Key, value> appelé rowValues ​est créé et fourni
à la méthode insert(). Chaque ligne de tblAmigo se compose des
colonnes: recID, nom, téléphone.
2. L’enregistrement nouvellement inséré retourne son rowID
3. Un second enregistrement est assemblé et envoyé à la méthode
insert () pour insertion dans tblAmigo. Après qu’il est colocalisé,
il renvoie son rowID.
4. rowValues ​est réinitialisée, donc rowValues ​qui n’est pas null
devient vide.
5. SQLite rejette les tentatives d’insertion d’un enregistrement vide
47
renvoyant rowID -1.
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
48

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Où WhereArgs est un tableau d’arguments.
 La méthode db.update() tente de mettre à jour tous les enregistrements
dans la table donnée qui satisfont la condition de filtrage définie par la
clause where. Après l’achèvement, elle renvoie le nombre
d’enregistrements affectés par la mise à jour (0 si elle échoue).
 Le filtre de mise à jour vérifie que "recID>? and recID <?". Après que les
substitutions d’args sont faites, le nouveau filtre devient: "recID> 249et
recID <7".
UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018
50

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Exemple:

 Une implémentation équivalente utilisant la méthode de


suppression Android :

 La méthode renvoie le nombre de lignes supprimées après


l’exécution de la commande (ou 0 s’il n’y en a pas).
51

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


 Etendre SQLiteOpenHelper et override (réecrire):
 OnCreate()
 OnUpgrade()
 Définir les champs de base de données, le nom de table et
la version de base de données.
 Déclarer helper subclass dans l’objet Activité.
 Ouvrir la base de données Readable or Writable
(inscriptible) au besoin.

52

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


public final static int VERSION = 1;
public final static String NAME = "mobile.db";
public final static String TABLE = "CLIENT";
public final static String CID ="CID";
public final static String FIRSTNAME="FIRSTNAME";
public final static String LASTNAME="LASTNAME";
public final static String NOTES="NOTES";

53

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


public class W5DBHelper extends SQLiteOpenHelper
{
public final static int VERSION = 1;
// ... this is where the other constants from the previous slide would go
public W5DBHelper(Context context)
{
super(context, NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
String sql = "create table " +TABLE +" ("+CID+" integer primary key,
"+FIRSTNAME+" text, "+LASTNAME+" text, "+NOTES+" text);";

db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("drop table if exists "+TABLE);
onCreate(db);
} 54
}

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018


W5DBHelper helper = new
W5DBHelper(getApplicationContext());
SQLiteDatabase dbHandler = helper.getWritableDatabase();

String sqlInsert = "insert into CLIENT (CID,FIRSTNAME,


LASTNAME, NOTES) values(null,'John','Casey','blah blah
blah');";

dbHandler.execSQL(sqlInsert);
55

UF3: Applications mobiles (APM) Dr. MECHTA Djamila 08/04/2018

Vous aimerez peut-être aussi