0% ont trouvé ce document utile (0 vote)
136 vues28 pages

Introduction à SQLite pour Android

Ce document décrit les principales fonctionnalités de SQLite, une base de données légère et portable. Il présente la syntaxe SQL de base ainsi que les classes Android permettant de manipuler une base SQLite comme SQLiteDatabase et SQLiteOpenHelper.

Transféré par

cirtatractor
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)
136 vues28 pages

Introduction à SQLite pour Android

Ce document décrit les principales fonctionnalités de SQLite, une base de données légère et portable. Il présente la syntaxe SQL de base ainsi que les classes Android permettant de manipuler une base SQLite comme SQLiteDatabase et SQLiteOpenHelper.

Transféré par

cirtatractor
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

Les bases de données

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

 Création d’une table:


CREATE TABLE table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype);

 Suppression d’une table:


DROP TABLE table_name;

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;

• Requête SELECT avec condition:


SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION];

• Requête SELECT avec plusieurs conditions:


SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2]... OR [conditionN];
7
Syntaxe SQLite
 La requête UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

 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.

• Une BDD SQLite est un fichier *.db placé dans le dossier


/data/data/PAQUETAGE/databases/NOM_BDD

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.

 Les méthodes de la classe SQLiteDatabase:


La méthode rawQuery:
• Cette méthode permet d’exécuter des requêtes de type SELECT.
• Elle retourne un objet de type Cursor qui permet de parcourir les n-uplets un à un :
• Exemple: (soit bdd un objet de type SQLiteDatabase)
• Cursor cursor = bdd.rawQuery("SELECT * FROM Etudiant WHERE...");
10
Classes pour travailler avec SQLite

 Les méthodes de la classe SQLiteDatabase: (suite)


La méthode execSQL : Cette méthode exécute une requête SQL qui ne retourne pas
d’informations : CREATE, INSERT. . .
•void execSQL(String sql) : on doit fournir la requête sous forme d’une chaîne.
• Exemple :
bdd.execSQL("DROP TABLE Etudiant");

•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.

•Les paramètres sont :


• table : le nom de la table
• val : une structure du type ContentValues qui associe des noms et des valeurs :
• whereClause : une condition contenant des jokers ?
• whereArgs : chaînes à mettre à la place des ?
12
Classes pour travailler avec SQLite
 Les méthodes de la classe SQLiteDatabase: (suite)

Méthodes spécialisées (suite)

• 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.

• Méthodes de la classe Cursor


• getCount() : retourne le nombre de ligne (le nombre d’enregistrement),
• getColumnCount() : retourne le nombre de colonnes
• moveToFirst() : positionner le curseur sur le premier
• isAfterLast() : retourne vrai si le parcours est fini
• moveToNext() : passe à la ligne suivante.
• getInt(i), getLong(i), getString(i), ... : récupérer la valeur de la colonne i.

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

• Une sorte d’écouteur avec deux méthodes à surcharger :


• onCreate() : cette méthode est appelée quand la base de données n’existe pas
encore. Son rôle est de créer les tables.

• onUpgrade() : cette méthode est appelée quand la nouvelle version de la base


de données est supérieure à la version précédente (newVersion > oldVersion) .
Son rôle est de mettre à jour les tables de la base de données.

• 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

public class Etudiant {


public String matricule, nom, prenom;
public Etudiant(String matricule, String nom, String prenom){
this.matricule=matricule; this.nom=nom; this.prenom=prenom;
}
}

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";

public DBExemple(Context context) { super(context, DB_NAME, null, DB_VERSION); }


@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE etudiant(matricule TEXT PRIMARY KEY, nom TEXT, prenom TEXT)";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS etudiant");
onCreate(db);
}
public Etudiant getEtudiant(String matricule) { … }
public void addEtudiant(Etudiant e) { …. }
18
}
Exemple: (suite)
2. Une classe pour gérer la BDD (suite)
public class DBExemple extends SQLiteOpenHelper {
…..
public Etudiant getEtudiant(String matricule) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor= db.rawQuery("Select * from etudiant where matricule=?",new String[]{matricule});
if (cursor.getCount()==0) return null;
cursor.moveToFirst();
Etudiant e = new Etudiant(cursor.getString(0), cursor.getString(1), cursor.getString(2));
return e;
}
public void addEtudiant(Etudiant e) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues val = new ContentValues();
val.put("matricule", e.matricule); val.put("nom", e.nom); val.put("nom", e.prenom);
db.insert("etudiant",null,val);
db.close();
}
} 19
Exemple: (suite)
3. L’activité Android:
public class MainActivity extends AppCompatActivity {
EditText editmat, editnom, editprenom;
DBExemple mydb;
@Override
protected void onCreate(Bundle savedInstanceState) {
……
editmat=this.findViewById(R.id. editmat);
……
mydb=new DBExemple(this);
}
public void ajouter(View v){
….
Etudiant e=new Etudiant(editmat.getText(). toString(), editnom.getText(). toString(),
editprenom.getText(). toString());
mydb.addEtudiant(e);
}
} 20
CursorAdapter
• Est un Adaptateur qui expose les données d'un Cursor à un ListView.
• Cursor est une classe qui permet de parcourir le résultat d’une requête SELECT.
• Il suffit d’étendre la classe CursorAdapter et redéfinir les méthodes newView() et
bindView()
• Le constructeur de la classe héritant de la classe CursorAdapter possède deux
paramètres:
• context: le contexte de l’application.
• cursor: résultat d’une requête SELECT.

public MyCursorAdapter(Context context, Cursor cursor) {


super(context, cursor, 0);
}

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);
}

Avec: item_layout est le fichier décrivant les items de ListView (res/layout/item_layout.xml)

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);

// Extraction des données du curseur


String str_nom = cursor.getString(0);
// 0 est la position de colonne nom
String str_prenom = cursor.getString(1);
// 1 est la position de colonne prenom

// Remplir les champs par les données extraites


edit_nom.setText(str_nom);
edit_prenom.setText(str_prenom); 23
}
CursorAdapter

 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

 Attacher l'adaptateur à un ListView:


• L'adaptateur est utilisé dans l'activité pour afficher un ensemble d'éléments dans un
ListView

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

Vous aimerez peut-être aussi