Vous êtes sur la page 1sur 21

Développement Android/SQlite

Séance 4
Base de données SQlite

FST/ FES SICOM/S3 1


Développement Android/SQlite
PLAN De la séance

 S Q L i te
 Création et mise à jour
 Types de données pour S Q L i te
 Création de table avec S Q L i te
 Exécution de requêtes
 Récupéreration de la base
 Mise à jour
 Insertion
 Suppression
 Modification
 Sélection
 Les curseurs
2
 L'adaptateur pour les curseurs
FST/ FES SICOM/S3 2
Développement Android/SQlite

INTRODU C TION
 SQLite permet de créér des bases de données légères internes aux
applications Android

 SQLite ne nécessite pas de serveur pour fonctionner, ce qui signifie que son
exécution se fait dans le même processus que celui de l'application.

 Par conséquent, une opération massive lancée dans la base de données aura
des conséquences visibles sur les performances de votre application.

 Ainsi, il vous faudra savoir maîtriser son implémentation afin de ne pas


3
pénaliser le restant de votre exécution.
FST/ FES SICOM/S3 3
Développement Android/SQlite
S Q L ITE

 SQLite a été inclus dans le cœur même d'Android, c'est pourquoi chaque application
peut avoir sa propre base.
 De manière générale, les bases de données sont stockées dans les répertoires de la
forme /data/data/<package>/databases.

 Il est possible d'avoir plusieurs bases de données par application, cependant


chaque fichier créé selon le mode M O D E _ P R I VAT E , par conséquent les bases ne
sont accessibles qu'au sein de l'application elle-même.

 La clé de chaque table soit un identifiant qui s'incrémente automatiquement.


4

FST/ FES SICOM/S3 4


Développement Android/SQlite
C R É AT I O N ET MISE À J O U R

 L a solution la plus évidente est d'utiliser une classe qui nous aidera à maîtriser
toutes les relations avec la base de données.

 Cette classe dérivera de SQLiteOpenHelper .

 A la création de la base de données, la méthode de callback est automatiquement


appelée, avec le paramètre db qui représentera la base.

void onCreate(SQLiteDatabase db)

 C'est dans cette méthode que vous devrez lancer les instructions pour créer les
différentes tables et éventuellement les remplir avec des données initiales.
5

FST/ FES SICOM/S3 5


Développement Android/SQlite
E XEM P L E

public class DatabaseOpenHelper extends SQLiteOpenHelper {


private static final String SQLCreateTableArticles =
"CREATE TA B L E Articles " + " ( ID " + " I N T EG E R PRIMA RY KEY," + "Title TEXT "+ " )";
public static final int databaseVersion = 1;
public static final String databaseName = "articlesDB";
private static final String SQLDeleteTableArticles = "DROP TABLE IF EXISTS Articles “ ;
public DatabaseOpenHelper(Context context) { super(context, databaseName, null,
databaseVersion);}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(SQLCreateTableArticles);}} 6

FST/ FES SICOM/S3 6


Développement Android/SQlite
TYPES D E D ONNÉES POUR SQL I T E

 Pour SQLite, c'est simple, il n'existe que cinq types de données :


⚫ N U L L pour les données Nulles.

⚫ I N T E G E R pour les entiers.

⚫ R E A L pour les nombres réels.

⚫ T E X T pour les chaînes de caractères.

⚫ B L O B pour les données brutes, par exemple si vous voulez mettre une image
dans votre base de données
8

FST/ FES SICOM/S3 7


Développement Android/SQlite

C R É AT I O N D E TA B L E A V E C SQLITE
 La création de table se fait avec une syntaxe très naturelle :

C REAT E TA BLE n om_de _la _table ( n om_du_cha mp_1 t ype {con t ra inte s },
nom_du_cha mp_2 t ype {con t raintes},
…);

 Pour chaque attribut, on doit déclarer au moins deux informations :


⚫ Son nom, afin de pouvoir l'identifier ;
⚫ Son type de donnée.

FST/ FES SICOM/S3 8


Développement Android/SQlite
C R É AT I O N D E TA B L E A V E C SQLITE

 Contraintes, on trouve comme contraintes :


⚫ P R I M A RY K E Y pour désigner la clé primaire sur un attribut
⚫ N OT N U L L pour indiquer que cet attribut ne peut valoir N U L L ;
⚫ C H E C K afin de vérifier que la valeur de cet attribut est cohérente ;
⚫ D E FAU LT sert à préciser une valeur par défaut.
 Exemple :

C R E AT E TA B L E nom_de_la_table (
champ1 I N T E G E R P R I M A RY K E Y,
champ2 T E XT NOT NUL L ,
champ3 R E A L N O T N U L L C H E C K (nom_du_champ_3 > 0),
10
champ4 I N T E G E R D E FA U LT 10);

FST/ FES SICOM/S3 9


Développement Android/SQlite
C R É AT I O N D E TA B L E A V E C SQLITE

public class DataBaseManager extends SQLiteOpenHelper {


private static final String DATABASE_NAME="Game.db";
private static final int DATABASE_VERSION=3;
public DataBaseManager(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String strSql= "create table T_scores("
+" idScore integer primary key autoincrement,"
+" name text not null,"
+" score integer not null,"
+" when_ integer not null"
+")";
db.execSQL(strSql);
10
Log.i("DATABASE", "on create invoked");}

FST/ FES SICOM/S3 10


Développement Android/SQlite
EXÉCUTION DE REQUÊTES

 Afin d'exécuter une requête S Q L pour laquelle on ne souhaite pas de réponse


ou on ignore la réponse, il suffit d'utiliser la méthode

void execSQL(String sql)

 De manière générale, on utilisera execSQL(String) dès qu'il ne s'agira pas de


faire un S E L E C T, U P DAT E , I N S E RT ou D E L E T E .
11

FST/ FES SICOM/S3 11


Développement Android/SQlite
M i s e à j o u r / o n U p g ra d e

méthode onUpgrade qui est déclenchée à chaque fois que l'utilisateur met à jour son
application.

void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

⚫ oldVersion est le numéro de l'ancienne version de la base de données que


l'application utilisait, alors que newVersion est le numéro de la nouvelle
version.

13

FST/ FES SICOM/S3 12


Développement Android/SQlite
M i s e à j o u r / o nUpgrade

 En fait, Android rajoute automatiquement dans la base une table qui contient la dernière
valeur connue de la base.

 À chaque lancement, Android vérifiera la dernière version de la base par rapport à la


version actuelle dans le code.
 Si le numéro de la version actuelle est supérieur à celui de la dernière version, alors la
méthode onUpgrade est lancée.

 En général, le contenu de cette méthode est assez constant puisqu'on se contente de


supprimer les tables déjà existantes pour les reconstruire suivant le nouveau schéma
13

FST/ FES SICOM/S3 13


Développement Android/SQlite

EXEMPLE

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String strSql ="drop table T_scores";
db.execSQL(strSql);
this.onCreate(db);
Log.i("DATABASE", "onUpgrade invoked");
} 14

FST/ FES SICOM/S3 14


Développement Android/SQlite
R É C U P É R E R AT I O N D E L A B A S E
 Si vous voulez accéder à la base de données n'importe où dans votre code, il
vous suffit de construire une instance de votre SQLiteOpenHelper avec le
constructeur
SQLiteOpenHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory, int version)

⚫ name est le nom de la base,

⚫ factory est un paramètre dont on explique après, il accepte la valeur null

⚫ Version est la version voulue de la base de données. 15

FST/ FES SICOM/S3 15


Développement Android/SQlite

INSERTION
 Pour ajouter une entrée dans la table, on utilise la syntaxe suivante :
In s ert i n to nom_de_la_table
(colonne1, colonne2, …) VA LU E S (valeur1, valeur2, …)
 L a partie (colonne1, colonne2, … ) permet d'associer une valeur à une colonne précise à l'aide
de la partie (valeur1, valeur2, … ) .
Exemple
public void insertScore(String name, int score){
name=name.replace("'", "''");
String strSql = "insert into T_Scores (name, score,when_) values ('"
+ name + "', "+ score+"," + new Date().getTime() + ")";
this.getWritableDatabase().execSQL(strSql);} 17

FST/ FES SICOM/S3 16


Développement Android/SQlite

S U P P R ES S I O N
 La méthode utilisée pour supprimer est:
int delete(String table, String whereClause, String[] whereArgs)
 L'entier renvoyé est le nombre de lignes supprimées. Avec:

⚫ table est le nom de la table.

⚫ whereClause correspond au WHERE en SQL


⚫ whereArgs est un tableau des valeurs qui remplaceront les « ? » dans
whereClause. 18

FST/ FES SICOM/S3 17


Développement Android/SQlite

SELECTION

Cursor query (boolean distinct, String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
⚫ distinct, si vous ne voulez pas de résultats en double.
⚫ table est l'identifiant de la table.
⚫ columns est utilisé pour préciser les colonnes à afficher.
⚫ selection est l'équivalent du whereClause précédent.
⚫ selectionArgs est l’équivalent du whereArgs précédent.
⚫ group by permet de grouper les résultats.
⚫ having est utile pour filtrer parmi les groupes.
⚫ order by permet de trier les résultats A S C (croissant) et D E S C ( décroissant).
20
⚫ limit pour fixer un nombre maximal de résultats voulus.
FST/ FES SICOM/S3 18
Développement Android/SQlite

LES CURSEURS
 Les curseurs permettent de parcourir le résultat d’une requête :
⚫ int getCount();
⚫ boolean moveToFirst();
⚫ boolean moveToNext();
⚫ boolean moveToLast() pour aller à la dernière.
⚫ boolean moveToPosition(int position);
⚫ int getColumnIndex(String columnName);
⚫ String getString(int columnIndex)
⚫ double getDouble(int columnIndex)
⚫ ...
⚫ void close(); 21

⚫ ...
FST/ FES SICOM/S3 19
Développement Android/SQlite
L E S C U RS E U RS
 Un Cursor est capable de retenir la position du dernier élément que l'utilisateur a consulté, il est donc
possible de naviguer d'avant en arrière parmi les lignes grâce aux méthodes suivantes :
⚫ boolean moveToNext() pour aller à la ligne suivante. Par défaut on commence à la ligne -1, donc, en utilisant un
moveToNext() sur un tout nouveau Cursor, on passe à la première ligne.
⚫ boolean moveToPrevious() pour aller à l'entrée précédente.

 Toutes ces méthodes renvoient des booléens.

 Pour récupérer la position actuelle, on utilise int getPosition(). Vous pouvez aussi savoir si vous êtes après la
dernière ligne avec boolean isAfterLast().
 Par exemple, pour naviguer entre toutes les lignes d'un curseur, on fait :
while (cursor.moveToNext()) {
//Faire quelque chose} 22
cursor.close();
FST/ FES SICOM/S3 20
Développement Android/SQlite
RÉFÉRENCES

 https://openclassrooms.com/courses/creez-des- applications-pour-android
 https://koor.fr/Java/SupportAndroid

25

FST/ FES SICOM/S3 21

Vous aimerez peut-être aussi