SQLITE. Imene Sghaier

Documents pareils
Stockage de données sous Android

Bases de données et fournisseurs de contenu

1. Base de données SQLite

Olivier Mondet

Le Langage De Description De Données(LDD)

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Bases de Données relationnelles et leurs systèmes de Gestion

I. MySQL : Serveur et SGBD

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

CREATION WEB DYNAMIQUE

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

OpenPaaS Le réseau social d'entreprise

Création et Gestion des tables

SQL Historique

Le Langage SQL version Oracle

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Introduction à JDBC. Accès aux bases de données en Java

Langage SQL : créer et interroger une base

PHP 5. La base de données MySql. A. Belaïd 1

TP3 : Creation de tables 1 seance

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

I4 : Bases de Données

Historisation des données

Les BASES de DONNEES dans WampServer

Programmation Android L3 informatique

Bases de données relationnelles

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

TP Contraintes - Triggers

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

FileMaker 13. Guide de référence SQL

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Paginer les données côté serveur, mettre en cache côté client

1/ Présentation de SQL Server :

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Les bases de données

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Compétences Business Objects

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Cours Bases de données 2ème année IUT

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Notes de cours : bases de données distribuées et repliquées

Java DataBaseConnectivity

MySQL / SQL EXEMPLES

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Stockage du fichier dans une table mysql:

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

MODE OPERATOIRE OPENOFFICE BASE

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

Application web de gestion de comptes en banques

Modélisation et Gestion des bases de données avec mysql workbench

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Introduction au Système de Gestion de Base de Données et aux Base de Données

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Auto-évaluation Oracle: cours de base

Le langage SQL (première partie) c Olivier Caron

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Encryptions, compression et partitionnement des données

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Objectifs du TP : Initiation à Access

Projet Android (LI260) Cours 2

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

PDO : PHP Data Object 1/13

Pour les débutants. langage de définition des données

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Intégrité sémantique dans les bases de données relationnelles

Cours SQL. Base du langage SQL et des bases de données

Présentation Windows Azure Hadoop Big Data - BI

Introduction aux Bases de Données 2004/2005

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Java Licence Professionnelle CISII,

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Configurer la supervision pour une base MS SQL Server Viadéis Services

Cours: Administration d'une Base de Données

PHP et les Bases de données - Généralités

Gestion des utilisateurs et de leurs droits

Serveur d'archivage 2007 Installation et utilisation de la BD exist

LES ACCES ODBC AVEC LE SYSTEME SAS

Mysql. Les requêtes préparées Prepared statements

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

BTS/CGO P10 SYSTEME INFORMATION Année

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

SYSTÈMES D INFORMATIONS

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Transcription:

SQLITE 1 Imene Sghaier 2017-2018

PLAN DU CHAPITRE Introduction SQLite Création et mise à jour Types de données pour SQLite Création de table avec SQLite Exécution de requêtes Récupéreration de la base Mise à jour Insertion Suppression Modification Sélection Les curseurs L'adaptateur pour les curseurs 2

INTRODUCTION 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 pénaliser le restant de votre exécution. 3

SQLITE 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éé l'est selon le mode MODE_PRIVATE, par conséquent les bases ne sont accessibles qu'au sein de l'application elle-même. Il est préférable de faire en sorte que la clé de chaque table soit un identifiant qui s'incrémente automatiquement. 4

CRÉATION ET MISE À JOUR La 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 void oncreate(sqlitedatabase db) est automatiquement appelée, avec le paramètre db qui représentera la base. 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

EXEMPLE public class DatabaseOpenHelper extends SQLiteOpenHelper { private static final String SQLCreateTableArticles = "CREATE TABLE Articles " + " ( ID " + " INTEGER PRIMARY 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

CRÉATION ET MISE À JOUR Pour créer une table, il faut fournir son nom et ses attributs. Chaque attribut sera défini à l'aide d'un type de données. On veut par exemple créer la table Metier caractérisée par ID, qui est un entier auto-incrémental pour représenter la clé ; Métier, qui est le nom du métier représenté par une chaîne de caractères ; Salaire, qui est un nombre réel. 7

TYPES DE DONNÉES POUR SQLITE Pour SQLite, c'est simple, il n'existe que cinq types de données ^_^ : NULL pour les données Nulles. INTEGER pour les entiers (sans virgule). REAL pour les nombres réels (avec virgule). TEXT pour les chaînes de caractères. BLOB pour les données brutes, par exemple si vous voulez mettre une image dans votre base de données 8

CRÉATION DE TABLE AVEC SQLITE La création de table se fait avec une syntaxe très naturelle : CREATE TABLE nom_de_la_table ( nom_du_champ_1 type {contraintes}, nom_du_champ_2 type {contraintes}, ); Pour chaque attribut, on doit déclarer au moins deux informations : Son nom, afin de pouvoir l'identifier ; Son type de donnée. 9

CRÉATION DE TABLE AVEC SQLITE Il est aussi possible de déclarer des contraintes pour chaque attribut à l'emplacement de {contraintes}. On trouve comme contraintes : PRIMARY KEY pour désigner la clé primaire sur un attribut NOT NULL pour indiquer que cet attribut ne peut valoir NULL ; CHECK afin de vérifier que la valeur de cet attribut est cohérente ; DEFAULT sert à préciser une valeur par défaut. Ce qui peut donner par exemple : CREATE TABLE nom_de_la_table ( champ1 INTEGER PRIMARY KEY, champ2 TEXT NOT NULL, champ3 REAL NOT NULL CHECK (nom_du_champ_3 > 0), champ4 INTEGER DEFAULT 10); 10

EXÉCUTION DE REQUÊTES Afin d'exécuter une requête SQL 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 SELECT, UPDATE, INSERT ou DELETE. 11

EXÉCUTION DE REQUÊTES Par exemple, pour notre table Metier : public class DatabaseHandler extends SQLiteOpenHelper { public static final String METIER_KEY = "id"; public static final String METIER_INTITULE = "intitule"; public static final String METIER_SALAIRE = "salaire"; public static final String METIER_TABLE_NAME = "Metier"; public static final String METIER_TABLE_CREATE = "CREATE TABLE " + METIER_TABLE_NAME + " (" + METIER_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " + METIER_INTITULE + " TEXT, " + METIER_SALAIRE + " REAL);"; public DatabaseHandler(Context context, String name, CursorFactory factory, int version) { } super(context, name, factory, version); @Override public void oncreate(sqlitedatabase db) { db.execsql(metier_table_create); }} 12

EXÉCUTION DE REQUÊTES Le problème du code précédent, c'est qu'il ne fonctionnera pas, et ce pour une raison très simple : il faut aussi implémenter la 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. 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 cette méthode 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

EXEMPLE public static final String METIER_TABLE_DROP = "DROP TABLE IF EXISTS " + METIER_TABLE_NAME + ";"; @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql(metier_table_drop); oncreate(db); } 14

RÉCUPÉRERATION DE LA BASE 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

MISE À JOUR Mise à jour de la base de données lors d un changement de version: public class DatabaseOpenHelper extends SQLiteOpenHelper { public static final int databaseversion = 1; @Override public void onupgrade(sqlitedatabase database, int oldversion, int newversion) { database.execsql(sqldeletetablearticles); oncreate(database); } @Override public void ondowngrade(sqlitedatabase database, int oldversion, int newversion) { onupgrade(database, oldversion, newversion); } } 16

INSERTION Pour ajouter une entrée dans la table, on utilise la syntaxe suivante : INSERT INTO nom_de_la_table (colonne1, colonne2, ) VALUES (valeur1, valeur2, ) La partie (colonne1, colonne2, ) permet d'associer une valeur à une colonne précise à l'aide de la partie (valeur1, valeur2, ). Exemple INSERT INTO Metier (Salaire, Metier) VALUES (50.2, "Prof") 17

SUPPRESSION 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. Par exemple, pour sélectionner la première valeur dans la table Metier, on mettra pour whereclause la chaîne «id = 1». En pratique, on préférera utiliser la chaîne «id =?». whereargs est un tableau des valeurs qui remplaceront les «?» dans whereclause. Ainsi, si whereclause vaut «LIKE? AND salaire >?» et qu'on cherche les métiers qui ressemblent à «ingénieur avec un salaire supérieur à 1000 dinars», il suffit d'insérer dans whereargs un String[] du genre {"ingenieur", "1000"}. 18

MODIFICATION int update(string table, ContentValues values, String whereclause, String[] whereargs). On ajoute juste le paramètre values pour représenter les changements à effectuer dans le ou les enregistrements cibles. Donc, si je veux mettre à jour le salaire d'un métier, il me suffit de mettre à jour l'objet associé et d'insérer la nouvelle valeur dans un ContentValues comme suit: ContentValues value = new ContentValues(); value.put(salaire, m.getsalaire()); mdb.update(table_name, value, KEY + " =?", new String[] {String.valueOf(m.getId())}); 19

SELECTION 3 formes différentes en fonction des paramètres qu'on veut lui passer. La première forme est celle-ci Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionargs, String groupby, String having, String orderby, String limit) La deuxième forme s'utilise sans l'attribut limit et la troisième sans les attributs limitetdistinct. 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. Mettre ASC pour trier dans l'ordre croissant et DESC pour l'ordre décroissant. limit pour fixer un nombre maximal de résultats voulus. 20

LES CURSEURS Les curseurs permettent de parcourir le résultat d une requête : int getcount(); boolean movetofirst(); boolean movetonext(); boolean movetoposition(int position); int getcolumnindex(string columnname); String getstring(int columnindex) double getdouble(int columnindex)... void close();... 21

LES CURSEURS Ainsi, pour parcourir les résultats d'une requête, il faut procéder ligner par ligne. Pour naviguer parmi les lignes, on peut utiliser les méthodes suivantes : boolean movetofirst() pour aller à la première ligne. boolean movetolast() pour aller à la dernière. boolean movetoposition(int position) pour aller à la position voulue, sachant que vous pouvez savoir le nombre de lignes avec la méthode int getcount(). 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 } cursor.close(); 22

LES CURSEURS Pour naviguer entre les colonnes de la table métier dont la première contient un entier, la deuxième, une chaîne de caractères, et la troisième, un réel. Pour récupérer le contenu d'une de ces colonnes, il suffit d'utiliser une méthode du style X getx(int columnindex) avec X le typage de la valeur à récupérer et columnindex la colonne dans laquelle se trouve cette valeur. On peut par exemple récupérer un Metier complet avec : long id = cursor.getlong(0); String intitule = cursor.getstring(1); double salaire = cursor.getdouble(2); Metier m = new Metier (id, intitule, salaire); 23

L'ADAPTATEUR POUR LES CURSEURS Comme n'importe quel adaptateur, un CursorAdapter fera la transition entre des données et un AdapterView. Cependant, comme on trouve rarement une seule information dans un curseur, on préférera utiliser un SimpleCursorAdapter, qui est un équivalent au SimpleAdapter que nous avons déjà étudié. Pour construire ce type d'adaptateur, on utilisera le constructeur suivant : SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to) avec: layout est l'identifiant de la mise en page des vues dans l'adapterview. c est le curseur. from indique une liste de noms des colonnes afin de lier les données au layout. to contient les TextView qui afficheront les colonnes contenues dans from. 24

RÉFÉRENCES https://openclassrooms.com/courses/creez-desapplications-pour-android/les-bases-de-donnees-5 25