Académique Documents
Professionnel Documents
Culture Documents
avec SQLite
1
Introduction
• Est un SGBD relationnel, léger, gratuit et Open Source
• Très utilisé dans le domaine des appareils mobiles
• Il fournit un support de bases de données relationnelles simplifiée
pour tenir sur une tablette.
• Ce qui lui manque :
• Pas de gestion des utilisateurs (pas de sécurité).
• Pas de réglages pour améliorer les performances
• Peu de types de données
• Fonctionne sans serveur, il stocke les données dans un fichier
portable (i.e. copiable sur n’importe quelle autre machine).
2
Introduction
Une application peut stocker des données dans une ou plusieurs bases
de données SQLite
Les bases de données sont privées à l'application qui les a créées
– Pour les partagées (les rendre publiques), on doit passer par un
fournisseur de contenu (ContentProvider)
3
Syntaxe SQLite
Type de données:
• INTEGER : nombres entiers, signés ou non
• REAL : nombres réels
• TEXT : données textuelles
• BLOB : stockage de données sous forme binaire
• NULL : si la donnée est nulle
Syntaxe SQLite:
• Toutes les requêtes SQL que vous connaissez fonctionnent.
• Exemples SQL:
• SELECT COUNT(*) FROM Person WHERE nom LIKE ‘M%';
• SELECT * FROM Person WHERE age> 20 ORDER BY age;
• SELECT AVG(age) AS moyenne FROM Person GROUP BY ……….;
• DELETE FROM Person WHERE nom=“Mohamed”;
4
Syntaxe SQLite
5
Syntaxe SQLite
La requête INSERT INTO
1. On spécifier les noms des colonnes et les valeurs à insérer:
INSERT INTO TABLE_NAME [(column1, column2,...columnN)] VALUES
(value1, value2,...valueN);
2. Si on ajoute des valeurs pour toutes les colonnes de la table, on peut ne pas spécifier les
noms des colonnes.
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
6
Syntaxe SQLite
La requête SELECT
• Requête simple:
SELECT column1, column2,..., columnN FROM table_name;
La requête DELETE
DELETE FROM table_name
WHERE [condition];
8
SQLite dans une application Android
Recommandations
• Il est recommandé de définir une classe associée à chaque table(Ça permet de faire
évoluer le logiciel assez facilement).
• Les instances de la classe sont les n-uplets de la table.
• Définir une classe qui regroupe toutes les requêtes SQL la concernant : création,
suppression, mise à jour, parcours, insertions. . . sous forme de méthodes de classe.
9
Classes pour travailler avec SQLite
La classe SQLiteDatabase
• Représente une BDD.
• Ses méthodes permettent d’exécuter une requête, par exemple :
void execSQL(String sql) pour CREATE, ALTER, DROP. . . qui ne retournent pas de données.
Cursor rawQuery(String sql, ...) pour des SELECT qui retournent des n-uplets.
•void execSQL(String sql, String[] Args) : c’est pour le même type de requête
mais contenant des jokers ? à affecter avec les chaînes fournis en paramètre.
• Exemple :
bdd.execSQL("DELETE FROM Etudiant WHERE nom=?
AND prenom=?", new String[] {"Amine", "Mohamed"});
11
Classes pour travailler avec SQLite
Les méthodes de la classe SQLiteDatabase: (suite)
Méthodes spécialisées
•int insert(String table, null, ContentValues val)
•retourne l’identifiant du nouveau n-uplet
• int update(String table, ContentValues val,
String whereClause, String[] Args)
• int delete(String table, String whereClause, String[] Args)
• update et delete retournent le nombre de n-uplets modifiées.
• Exemples:
ContentValues valeurs = new ContentValues();
valeurs.put("nom", "Amine");
valeurs.put("prenom", "Mohamed");
bdd.update("Etudiant", valeurs, "matricule=?",
new String[] { "D0014" });
bdd.delete("Etudiant", "age BETWEEN ? AND ?",
new String[]{"20","22"});
13
Classes pour travailler avec SQLite
La classe Cursor
• Permet de parcourir le résultat d’une requête SELECT.
14
La classe SQLiteOpenHelper
• Android fournit la classe SQLiteOpenHelper qui permet de faciliter la gestion d’une base
de données.
• Le développeur doit créer une classe qui la spécialise, il faut redéfinir deux méthodes :
• une méthode de création
public void onCreate(SQLiteDatabase db)
• une méthode de mise à jour
public void onUpgrade(SQLiteDatabase db, int odlVersion, int newVersion)
où ● db est la base de données manipulée
● oldVersion est la version précédente de la base de données
● newVersion la nouvelle version de la base de données
15
La classe SQLiteOpenHelper
• Autres méthodes:
• getReadableDatabase pour ouvrir la base de données en mode lecture.
• getWritableDatabase pour ouvrir la base de données en mode ecriture.
16
Exemple:
Ecrire un programme Android qui permet de stocker une liste d’étudiants dans
une base de données SQLite
1. La classe Etudiant
17
Exemple: (suite)
2. Une classe pour gérer la BDD
public class DBExemple extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "dbcours";
21
CursorAdapter
• La méthode newView():
• est utilisée pour instancier une nouvelle vue et la renvoyer.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.item_layout, parent,
false);
}
22
CursorAdapter
• La méthode bindView():
• Est utilisée pour lier les données à une vue donnée.
• Exemple
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Les champs à remplir dans la vue de l’item
TextView edit_nom = view.findViewById(R.id.editnom);
TextView edit_prenom = view.findViewById(R.id.editprenom);
Récupération du curseur:
• Pour utiliser un CursorAdapter, nous devons interroger une base de données SQLite et
récupérer un Cursor représentant le résultat.
• Nous pouvons utiliser SQLiteOpenHelper qui donne accès à la base de données sous-jacente.
• Nous utilisons la méthode rawQuery qui renvoie un Cursor.
Exemple:
// DBExemple est une sous classe de la classe SQLiteOpenHelper
DBExemple mydbh= new DBExemple(this);
SQLiteDatabase db = mydbh.getReadableDatabase();
Cursor cursor= db.rawQuery("SELECT * FROM etudiant", null);
24
CursorAdapter
Exemple:
// Trouver ListView à remplir (lv est l’identifiant de ListView)
ListView lv= this.findViewById(R.id.lv);
// Création de l’adaptateur
MyCursorAdapter adapter= new MyCursorAdapter(this, cursor);
// Attacher l’adaptateur au ListView
lv.setAdapter(adapter);
25
CursorAdapter liste_etudiant.xml
<RelativeLayout ......>
<ListView
Exemple: android:layout_width="....."
android:layout_height="...."
android:id="@+id/lv"></ListView>
</RelativeLayout>
Item_layout.xml
26
CursorAdapter
Exemple:
Coté adaptateur:
public class MyCursorAdapter extends CursorAdapter {
public MyCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}
// The newView method is used to inflate a new view and return it
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.item_layout, parent,
false);
}
27
CursorAdapter
Exemple: Coté adaptateur (suite)
// The bindView method is used to bind all data to a given view
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
TextView txtmat = (TextView) view.findViewById(R.id.txtmat);
TextView txtnom = (TextView) view.findViewById(R.id.txtnom);
TextView txtprenom = (TextView) view.findViewById(R.id.txtprenom);
// Extract properties from cursor
String mat = cursor.getString(1);
String nom = cursor.getString(2);
String prenom = cursor.getString(3);
// Populate fields with extracted properties
txtmat.setText(mat);
txtnom.setText(nom);
txtprenom.setText(prenom);
}
} 28