Chapitre 7: Bases de données
SADOUKI Fatiha
14/04/2025 Applications Mobiles 1
SQLite est une bibliothèque écrite en langage C qui propose un
moteur de base de données relationnelle accessible par le
langage SQL.
Contrairement aux serveurs de bases de données traditionnels,
comme MySQL ou PostgreSQL, il est directement intégré aux
programmes. L'intégralité de la base de données (déclarations,
tables, index et données) est stockée dans un fichier
indépendant de la plateforme.
14/04/2025 Applications Mobiles 2
le créateur de SQLite, a choisi de mettre cette
bibliothèque ainsi que son code source dans le
domaine public, ce qui permet son utilisation
sans restriction aussi bien dans les projets open
source que dans les projets propriétaires.
14/04/2025 Applications Mobiles 3
Sa taille est extrêmement légère
(moins de 2 Mo), il est également
très populaire sur :
• les systèmes embarqués
• la plupart des smartphones
modernes : l’iPhone ainsi que
les systèmes d’exploitation
mobiles Symbian et Android
l’utilisent comme base de
données embarquée.
14/04/2025 Applications Mobiles 4
SQLite est une base de données intégrée à Android. Elle est légère et bien adaptée
pour stocker et gérer des données structurées.
Avantages :
• Léger et rapide.
• Intégré à Android, donc pas de dépendances supplémentaires.
• Prise en charge de SQL, un langage de requête standard.
Inconvénients :
• Nécessite d'écrire du code SQL, ce qui peut être complexe pour les opérations
avancées.
• Moins adapté aux grandes quantités de données ou aux applications
complexes.
14/04/2025 Applications Mobiles 5
SQLiteOpenHelper
• la classe SQLiteOpenHelper permet de gérer
les bases de données Android (SQLite)
14/04/2025 Applications Mobiles 6
Création de la classe « Helper »
1. Pour créer et mettre à jour une base de données
dans une application Android, on doit créer une
classe qui hérite de la class SQLiteOpenHelper.
Dans cet exemple, nous allons donner le nom
« AideSql » à cette class. File → New → Java Class
14/04/2025 Applications Mobiles 7
Création de la classe « Helper »
2. Ensuite, il faut implémenter les méthodes (onCreate() &
onUpgrade()) et créer le constructeur qui prend comme
paramètre le contexte de l’activité appelante.
3. Maintenant, il faut ajouter l’instruction qui permet de
créer la Base De Donnée.
public AideSql (Context context) {
super(Context context, String name,
[Link] factory, int version);
}
• context est le contexte de l'application
• name est le nom du fichier contenant la BD = nom de la BD
• factory est utilisé pour créer des Cursor. En général on met null
• version est le numéro de version de la BD (commençant à 1)
14/04/2025 Applications Mobiles 8
Création de la classe « Helper »
Exemple :
public AideSql (Context context) {
super(context, “[Link]", null, 1)
};
14/04/2025 Applications Mobiles 9
Création de la classe « Helper »
4. Dans cette classe, on doit redéfinir les méthodes suivantes
pour créer et mettre à jour la base de données :
• onCreate() : pour accéder à une base de données qui n’est
pas encore créée.
• onUpgrade() : si la version de la base de données évolue,
cette méthode permettra de mettre à jour le schéma de
base de données existant ou de supprimer la base de
données existante et la recréer par la méthode onCreate().
Elle est déclanchée a chaque fois que l’utilisateur mis a
jour l’application.
14/04/2025 Applications Mobiles 10
Création de la classe « Helper »
• Les deux méthodes reçoivent en paramètre un objet
SQLiteDatabase qui est la représentation Java de la
base de données.
➢ public void onCreate(SQLiteDatabase db)
➢ public void onUpgrade(SQLiteDatabase db,
int oldVersion, int newVersion)
Ces deux méthodes sont appelées automatiquement
pour la creation des tables et de leurs contenus
14/04/2025 Applications Mobiles 11
Code de la classe d'aide
[Link]
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Appelée pour créer la base si elle n’existe
// Script to create table. pas encore.
// Execute script.
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop table
// Recreate Appelée si la version de la base de données est
onCreate(db); }
}
changée.
14/04/2025 Applications Mobiles 12
Création de la classe « Helper »
➢La classe Helper doit contenir les différenes
méthodes pour intéragir avec la base de
données. C’est le DAO (Data Access Object)
➢Il est préférable de créer une classe pour
chaque table (pour alléger le code)
14/04/2025 Applications Mobiles 13
Gestions des tables
➢ Création
CREATE TABLE IF NOT EXISTS nom_table (
nom-champ1 type {contraintes}
nom-champ2 type {contraintes}
…) ;
Exemple : CREATE TABLE IF NOT EXISTS produit( id INTEGER PRIMARY KEY, nom
text NOT NULL, prix REAL CHECK (prix > 0)) ;
➢ Création d'index
CREATE INDEX IF NOT EXISTS nom_index ON nom_table (champ_index);
Exemple : CREATE INDEX IF NOT EXISTS produit_ind ON produit (id);
➢ Effacement de table
DROP TABLE nom-table;
14/04/2025 Applications Mobiles 14
Création de la classe « Helper »
5. Une fois la base de données a été créée, il nous reste que la
création de la table : « produit » en appelant la méthode
execSQL qui permet d’exécuter des requêtes SQL qui n’ont pas
des données de retour (ex : insertion, suppression,
modification).
public void onCreate(SQLiteDatabase db)
{ [Link]( " create table produit (ID INTEGER PRIMARY KEY
AUTOINCREMENT, NOM TEXT, PRIX REAL) "); }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) { [Link]( " drop table if exists produit “);
onCreate(db); }
14/04/2025 Applications Mobiles 15
Code de la classe d'aide
public class AideSql extends SQLiteOpenHelper {
public AideSql( Context context) {
super(context, “commerce", null, 1);
}
public void onCreate(SQLiteDatabase db) {
[Link]( " create table produit (ID INTEGER PRIMARY
KEY AUTOINCREMENT, NOM TEXT, PRIX REAL) ");
}
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
[Link]( " drop table if EXISTS produit");
onCreate(db);
}
14/04/2025 Applications Mobiles 16
Ouvrir une base de données
Pour ouvrir une base de données,
➢ créer une instance de la classe héritée de la classe
SQLiteOpenHelper
➢ puis appeler les méthodes getReadableDatabase et
getWritableDatabase de cette instance
À l’appel des méthodes getReadableDatabase,
getWritableDatabase, fournits par la classe SQLiteOpenHelper,
on obtient une instance de la base de données (en lecture seule
ou en lecture/écriture) de la classe SQLiteDatabase.
Exemple :
SQLiteDatabase db = [Link]();
SQLiteDatabase db = [Link]();
14/04/2025 Applications Mobiles 18
Requêtes
➢ Sélection
SELECT col1,col2,...,coln FROM nom_table WHERE expr GROUP BY expr
HAVING expr {UNION, INTERSECT, EXCEPT} SELECT ...
➢ Insertion
INSERT INTO nom_table (col1,col2,...,coln) VALUES (val1,val2,...,valn) ;
➢ Mise à jour
UPDATE nom_table SET col1=val1, col2=val2, ...,coln=valn WHERE expr ;
➢ Suppression
DELETE FROM nom_table WHERE expr ;
➢ Expressions
• Opérateurs classiques :|| * / % + - < <> > & | < <= > >= == != NOT
• Like et regex : colname LIKE x: (% pour .* et _ pour ?) ou colname
REGEXP r
Pour executer une requête, il faut utiliser la méthode [Link](requete)
14/04/2025 Applications Mobiles 19
L'objet Cursor
• Le Cursor représente un ensemble de "lignes" contenant le
résultat de la requête SELECT.
• on peut déplacer en modifiant la position de celui-ci au sein
des résultats retournés dans le cursor, via les méthodes de
navigation de la classe Cursor fournies.
14/04/2025 Applications Mobiles 20
L'objet Cursor
• on peut aussi récupérer les informations au sein des résultats
retournés dans le cursor, via les méthodes d’information de la
classe Cursor fournies.
14/04/2025 Applications Mobiles 21
L'objet Cursor
• Pour récupérer une valeur depuis un curseur, naviguez au sein
de celui-ci, puis utilisez l’une des méthodes get pour retrouver
la valeur à partir de l’index de la colonne.
Chaîne de caractères [Link](COLONNE_index)
Entier 32 bits [Link](COLONNE_index)
Entier long 64 bits [Link](COLONNE_index)
Tableau de bytes. [Link](COLONNE_index)
Nombre décimal flottant 32 bits. [Link](COLONNE_index)
Nombre décimal flottant 64 bits [Link](COLONNE_index)
Nombre entier court 16 bits [Link](COLONNE_index)
14/04/2025 Applications Mobiles 22
Création de la class « Helper »
6. Enfin, dans la class MainActivity on rajoute
l’instruction suivant qui fait l’appel au
constructeur de la class précédente en passant le
contexte de l’activité comme paramètre.
AideSql s = new AideSql(this);
14/04/2025 Applications Mobiles 23
Insertion d’un étudiant (execSQL)
1. Dans la classe AideSql, il faut créer la méthode : insertion qui
prend en paramètre une requête sous forme d’une chaine de
caractère.
public void insertion (String Requete) {
//récupérer la base de donnée en mode écriture
SQLiteDatabase db = [Link]();
[Link] ( Requete);
}
2. Dans la class MainActivity on rajoute l’instruction qui fait l’appel à
la méthode insertion.
AideSql s = new AideSql(this);
String Req ="insert into etudiant (NOM,PRENOM) values ('"
+nom+"','"+prenom+"')" ;
[Link](Req);
14/04/2025 Applications Mobiles 24
Selection
Cursor rawQuery(String query, String[]
selectionArgs)
Exemple :
Cursor c = [Link]("SELECT nom, prix, date
FROM produit WHERE prix > 1000 ORDER BY nom
DESC limit 30“, null) ;
14/04/2025 Applications Mobiles 25
Selection (rawQuery)
1. Dans la classe AideSql, il faut créer la méthode : listAll qui
prend en paramètre une requête sous forme d’une chaine
de caractère.
Contrairement à l’instruction execSQL, la requête rawQuery
c’est une instruction de sélection qui retourne des données.
Le résultat est un objet de type Cursor (table)
public Cursor listAll () {
SQLiteDatabase db = [Link]();
Cursor c = [Link]("select * from etudiant",null);
return c;
}
14/04/2025 Applications Mobiles 26
Selection des étudiants (rawQuery)
2. Dans la class MainActivity on rajoute les instructions qui
permettent d’appeler la méthode listAll et de parcourir
l’objet Cursor
Cursor c= [Link]();
if ([Link]()==0) {
Log.i("msg","la table est vide");
} else {
while ([Link]()) {
int id = [Link](0) ;
String nom= [Link](1) ;
String prenom = [Link](2) ;
}
14/04/2025 Applications Mobiles 28
Vidéo
Android- Persistances des données- Base
de données SQLITE
[Link]
14/04/2025 Applications Mobiles 29
Exemple
l'application enregistre les notes de la journée. Nous avons besoin d'une
structure de table pour stocker les notes.
Le nom de la table: etudiant
Type
Nom Contraintes Description
donnée
ID int Primary Key Primary Key
NOM text Nom de l’étudiant
Prénom de l’étudiant
PRENOM text
14/04/2025 Applications Mobiles 30
Etapes
• Créer un projet Android
• Ajouter une nouvelle activité vide (Empty
Activity)
• Dans la première activité, ajouter les vues
pour la saisie et commandes (Plain Text,
Button)
• Dans la seconde, ajouter une liste (listView)
pour afficher les données
14/04/2025 Applications Mobiles 31
14/04/2025 Applications Mobiles 34
Chapter 7: Databases
Fatiha SADOUKI
14/04/2025 Applications Mobiles 35
SQLite is a library written in C that provides a relational database
engine accessible via the SQL language.
Unlike traditional database servers, such as MySQL or
PostgreSQL, it is directly integrated into programs. The entire
database (declarations, tables, indexes and data) is stored in a
platform-independent file.
14/04/2025 Applications Mobiles 36
The creator of SQLite, has chosen to place this library
and its source code in the public domain, enabling its
unrestricted use in both open source and proprietary
projects.
14/04/2025 Applications Mobiles 37
Extremely light in size (less than 2
MB), it is also very popular on:
• Embedded systems
• Most modern smartphones: the
iPhone, Symbian and Android
mobile operating systems use it
as an embedded database.
14/04/2025 Applications Mobiles 38
SQLite is a database integrated into Android. It's lightweight and well suited
to storing and managing structured data.
Advantages: :
– Lightweight and fast.
– Integrated with Android, so no additional dependencies.
– Supports SQL, a standard query language.
Disadvantages:
– Requires writing SQL code, which can be complex for advanced
operations.
– Less suitable for large amounts of data or complex applications.
14/04/2025 Applications Mobiles 39
SQLiteOpenHelper
• SQLiteOpenHelper class for managing Android
databases (SQLite)
14/04/2025 Applications Mobiles 40
Creating the “Helper” class
1. To create and update a database in an Android
application, we need to create a class that inherits
from the SQLiteOpenHelper class. In this example,
we'll give this class the name “AideSql” to this class.
File → New → Java Class
14/04/2025 Applications Mobiles 41
Creating the “Helper” class
2. Next, implement the methods (onCreate() &
onUpgrade()) and create the constructor, which takes the
context of the calling activity as its parameter.
3. Now we need to add the instruction that creates the
Database.
public AideSql (Context context) {
super(Context context, String name,
[Link] factory, int version);
}
• context is the application context name
• name is the name of the file containing the DB = DB name
• factory is used to create Cursors. Usually set to null
• version is the DB version number (starting at 1)
14/04/2025 Applications Mobiles 42
Creating the “Helper” class
Example:
public AideSql (Context context) {
super(context, “[Link]", null, 1)
};
14/04/2025 Applications Mobiles 43
Creating the “Helper” class
4. In this class, we need to redefine the following
methods for creating and updating the database:
– onCreate(): to access a database not yet created.
– onUpgrade(): if the database version evolves, this
method will update the existing database schema,
or delete the existing database and recreate it
using the onCreate() method. It is triggered each
time the user updates the application.
14/04/2025 Applications Mobiles 44
Creating the “Helper” class
Both methods receive a SQLiteDatabase object as
parameter, which is the Java representation of the
database.
➢public void onCreate(SQLiteDatabase db)
➢public void onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion)
These two methods are called automatically to
create tables and their contents
14/04/2025 Applications Mobiles 45
Code de la classe d'aide (Help class code)
[Link]
public class MyDatabaseHelper extends SQLiteOpenHelper {
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Called to create the database if it doesn't
// Script to create table. already exist.
// Execute script.
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop table
// Recreate Called if the database version is changed.
onCreate(db); }
}
14/04/2025 Applications Mobiles 46
Creating the “Helper” class
➢The Helper class must contain the various
methods for interacting with the database.
This is the DAO (Data Access Object)
➢It is preferable to create a class for each table
(to lighten the code).
14/04/2025 Applications Mobiles 47
Table management
➢ Creation
CREATE TABLE IF NOT EXISTS table_name ( field-name1 type {constraints}
field-name2 type {constraints} ...) ;
Example : CREATE TABLE IF NOT EXISTS product( id INTEGER PRIMARY KEY,
name text NOT NULL, price REAL CHECK (price > 0)) ;
➢ Index
creationCREATE INDEX IF NOT EXISTS index_name ON table_name
(index_field);
Example: CREATE INDEX IF NOT EXISTS product_ind ON product (id);
➢ Table deletion
DROP TABLE table_name;
14/04/2025 Applications Mobiles 48
Creating the “Helper” class
5. Once the database has been created, all that remains is to
create the “product” table by calling the execSQL method,
which allows you to execute SQL queries that don't have
return data (e.g.: insert, delete, modify).
public void onCreate(SQLiteDatabase db)
{ [Link]( " create table produit (ID INTEGER PRIMARY KEY
AUTOINCREMENT, NOM TEXT, PRIX REAL) "); }
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) { [Link]( " drop table if exists produit “);
onCreate(db); }
14/04/2025 Applications Mobiles 49
Help class code
public class AideSql extends SQLiteOpenHelper {
public AideSql( Context context) {
super(context, “commerce", null, 1);
}
public void onCreate(SQLiteDatabase db) {
[Link]( " create table produit (ID INTEGER PRIMARY
KEY AUTOINCREMENT, NOM TEXT, PRIX REAL) ");
}
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
[Link]( " drop table if EXISTS produit");
onCreate(db);
}
14/04/2025 Applications Mobiles 50
SQLite data types
14/04/2025 Applications Mobiles 51
Open a database
To open a database
➢ create an instance of the class inherited from the
SQLiteOpenHelper class
➢ then call this instance’s getReadableDatabase and
getWritableDatabase methods.
When you call the getReadableDatabase and getWritableDatabase
methods provided by the SQLiteOpenHelper class, you obtain an
instance of the database (read-only or read/write) of the
SQLiteDatabase class.
Examples :
SQLiteDatabase db = [Link]();
SQLiteDatabase db = [Link]();
14/04/2025 Applications Mobiles 52
Requests
➢ Selection
SELECT col1,col2,...,coln FROM table_name WHERE expr GROUP BY expr
HAVING expr {UNION, INTERSECT, EXCEPT} SELECT ...
➢ Insert
INSERT INTO table_name (col1,col2,...,coln) VALUES (val1,val2,...,valn) ;
➢ Update
UPDATE table_name SET col1=val1, col2=val2, ...,coln=valn WHERE expr ;
➢ Delete
DELETE FROM table_name WHERE expr ;
➢ Expressions
Classic operators :|| * / % + - < <> > & | < <= > >= == != NOT Like and regex:
colname LIKE x: (% for .* and _ for ?) or colname REGEXP r
To execute a query, use the method [Link](requete)
14/04/2025 Applications Mobiles 53
Cursor object
• The cursor represents a set of “lines” containing the result of
the SELECT query.
• The cursor can be moved by modifying its position within the
results returned in the cursor, via the navigation methods of
the Cursor class supplied.
14/04/2025 Applications Mobiles 54
Cursor object
• You can also retrieve information from the results
returned by the cursor, using the information
methods provided by the Cursor class.
14/04/2025 Applications Mobiles 55
Cursor object
• To retrieve a value from a cursor, navigate within it, then use
one of the get methods to retrieve the value from the column
index.
Character string [Link](COLONNE_index)
32-bit integer [Link](COLONNE_index)
64-bit long integer [Link](COLONNE_index)
Array of bytes [Link](COLONNE_index)
32-bit floating decimal number [Link](COLONNE_index)
64-bit floating decimal number [Link](COLONNE_index)
16-bit short integer [Link](COLONNE_index)
14/04/2025 Applications Mobiles 56
Creating the “Helper” class
6. Finally, in the MainActivity class, we add the
following instruction, which calls the constructor
of the previous class, passing the context of the
activity as a parameter.
AideSql s = new AideSql(this);
14/04/2025 Applications Mobiles 57
Insertion d’un étudiant (execSQL)
1. In the AideSql class, we need to create the : insertion
method, which takes a query in string form as parameter.
public void insertion (String Requete) {
//recover database in write mode
SQLiteDatabase db = [Link]();
[Link] ( Requete);
}
1. In the MainActivity class, we add the instruction that calls
the insertion [Link] s = new AideSql(this);
String Req ="insert into etudiant (Name,Fname) values
(‘” +name+"',’”+fname+"')" ;
[Link](Req);
14/04/2025 Applications Mobiles 58
Selection
Cursor rawQuery(String query, String[]
selectionArgs)
Example :
Cursor c = [Link]("SELECT name, price, date
FROM product WHERE price > 1000 ORDER BY name
DESC limit 30“, null) ;
14/04/2025 Applications Mobiles 59
Selection (rawQuery)
1. In the AideSql class, create the method: listAll, which takes a
query in the form of a character string as parameter.
Unlike the execSQL statement, the rawQuery is a selection
statement that returns data.
The result is an object of type Cursor (table)
public Cursor listAll () {
SQLiteDatabase db = [Link]();
Cursor c = [Link]("select * from etudiant",null);
return c;
}
14/04/2025 Applications Mobiles 60
Selection des étudiants (rawQuery)
2. In the MainActivity class, we add instructions for calling
the listAll method and browsing the Cursor object
Cursor c= [Link]();
if ([Link]()==0) {
Log.i("msg","la table est vide");
} else {
while ([Link]()) {
int id = [Link](0) ;
String name= [Link](1) ;
String fname = [Link](2) ;
}
14/04/2025 Applications Mobiles 62
Vidéo
Android- Persistances des données- Base
de données SQLITE
[Link]
14/04/2025 Applications Mobiles 63
Example
The application records the day's notes. We need a table structure to store
the notes. Table name: etudiant
Data
Name Constraintses Description
type
ID int Primary Key Primary Key
Name text Student's name
Fname text Student's first name
14/04/2025 Applications Mobiles 64
Etapes
• Create an Android project
• Add a new empty activity (Empty Activity)
• In the first activity, add views for input and
commands (Plain Text, Button)
• In the second activity, add a listView to
display data
14/04/2025 Applications Mobiles 65