0% ont trouvé ce document utile (0 vote)
35 vues60 pages

Chapitre 7:: Bases de Donn Es

SQLite est une bibliothèque C qui offre un moteur de base de données relationnelle intégré aux programmes, stockant toutes les données dans un fichier indépendant de la plateforme. Bien qu'elle soit légère et populaire sur des systèmes comme Android, elle nécessite des compétences en SQL pour des opérations avancées. La classe SQLiteOpenHelper permet de gérer les bases de données Android, facilitant la création et la mise à jour des bases de données.

Transféré par

abdelwahabbouchibane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
35 vues60 pages

Chapitre 7:: Bases de Donn Es

SQLite est une bibliothèque C qui offre un moteur de base de données relationnelle intégré aux programmes, stockant toutes les données dans un fichier indépendant de la plateforme. Bien qu'elle soit légère et populaire sur des systèmes comme Android, elle nécessite des compétences en SQL pour des opérations avancées. La classe SQLiteOpenHelper permet de gérer les bases de données Android, facilitant la création et la mise à jour des bases de données.

Transféré par

abdelwahabbouchibane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi