1. Base de données SQLite

Documents pareils
CREATION WEB DYNAMIQUE

I4 : Bases de Données

Bases de données relationnelles

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

Création et Gestion des tables

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

TP2 : Client d une BDD SqlServer

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

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

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

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

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

Olivier Mondet

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

SQL Historique

Langage SQL : créer et interroger une base

Bases de données et fournisseurs de contenu

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

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)

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)

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

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

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

Objectifs du TP : Initiation à Access

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

PROJET 1 : BASE DE DONNÉES REPARTIES

TP3 : Creation de tables 1 seance

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

TP Contraintes - Triggers

Application web de gestion de comptes en banques

Historisation des données

BTS/CGO P10 SYSTEME INFORMATION Année

TD/TP 1 Introduction au SDK d Android

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

OpenPaaS Le réseau social d'entreprise

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

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

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

FEN FICHE EMPLOIS NUISANCES

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

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Insérer des images dans Base

Encryptions, compression et partitionnement des données

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

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

Les BASES de DONNEES dans WampServer

Le Langage De Description De Données(LDD)

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

Java DataBaseConnectivity

1 Position du problème

Le modèle de données

I. MySQL : Serveur et SGBD

Stockage de données sous Android

A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES?

Pratique et administration des systèmes

Les bases de données

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

Compétences Business Objects

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

OUTIL DE TRAVAIL COLLABORATIF

PHP 4 PARTIE : BASE DE DONNEES

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

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

Installation et prise en main

SUPPORT DE COURS / PHP PARTIE 3

Mysql avec EasyPhp. 1 er mars 2006

Installation d'un serveur FTP géré par une base de données MySQL

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

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

BIRT (Business Intelligence and Reporting Tools)

Sommaire. Etablir une connexion avec une base de données distante sur PostGreSQL

Gestion de base de données

BASES DE DONNEES TP POSTGRESQL

TP Bases de données réparties

Bases de données élémentaires Maude Manouvrier

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

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

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

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

1 Introduction et installation

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Stockage du fichier dans une table mysql:

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

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Le Langage SQL version Oracle

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Manuel Viadeis CRM Connecteur intégration L100 étendue.

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Initiation à Excel. Frédéric Gava (MCF)

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Cours 1 : introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

AGRÉGATION «ÉCONOMIE ET GESTION»

Transcription:

Dans ce TP, nous allons voir comment créer et utiliser une base de données SQL locale pour stocker les informations. La semaine prochaine, ça sera avec un WebService. On repart de l application AvosAvis de la semaine précédente... quelque soit son état d avancement. Vous pouvez même repartir de la version de base, AvosAvis.zip, mais évidemment la vôtre 1 sera plus complète. 1. Base de données SQLite Faites une copie du projet AvosAvis et appelez-la AvosAvisSQL, puis travaillez uniquement sur cette copie. 1.1. Essais en ligne de commande Lancez un AVD (pas la tablette réelle, car sqlite3 n y est pas installé en tant que programme utilisateur). Relisez le TP1 en ce qui concerne la connexion en shell avec la commande adb. Connectez-vous en shell sur l AVD. NB: il peut y avoir un bug. Si vous n arrivez pas à vous connecter à la tablette, alors tapez : adb kill-server adb start-server adb devices Dans le shell de la tablette, lancez la commande sqlite3 sans paramètre. En faisant ainsi, ce qu on va créer ne sera qu en mémoire vive, pas enregistré dans un fichier. Faites-vous la main avec quelques requêtes SQL et directives spécifiques de SQLite : CREATE TABLE Loisirs ( _id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT NOT NULL);.schema Loisirs INSERT INTO Loisirs VALUES (1,'sport'); INSERT INTO Loisirs VALUES (2,'informatique'); INSERT INTO Loisirs VALUES (null,'cinéma'); INSERT INTO Loisirs VALUES (null,'santé');.dump Loisirs SELECT * FROM Loisirs;.headers on SELECT nom FROM Loisirs WHERE _id=3;.dump Loisirs UPDATE Loisirs SET nom='ordinateur' WHERE _id=2; DELETE FROM Loisirs WHERE nom='santé'; SELECT * FROM Loisirs ORDER BY nom ASC;.exit Notez que l identifiant d une table doit TOUJOURS être un entier appelé _id. Si on fournit null 1 Ne copiez pas le projet d un autre étudiant, ce serait très peu apprécié. Demandez plutôt de l aide. Le but, c est que vous appreniez quelque chose, pas que le TP semble fini. 1

en tant qu identifiant alors SQLite en attribue un automatiquement. C est le rôle de l option AUTOINCREMENT. 1.2. Table Avis On va commencer par définir une classe TableAvis qui représente la table Avis (libellé, note, auteur et date). Relisez le cours de la semaine 6, notamment le transparent intitulé «Classe pour une table». L idée, c est que cette classe va remplacer le ArrayList des TPs précédents. Complétez les méthodes de la classe TableAvis : void create(sqlitedatabase bdd) Cette méthode effectue la création de la table dans la base de données. Elle exécute une requête CREATE TABLE Avis... à l aide de la méthode execsql sur le paramètre bdd. Les attributs de la table sont : _id de type INTEGER PRIMARY KEY AUTOINCREMENT libelle de type TEXT NOT NULL note de type FLOAT auteur de type TEXT date de type INTEGER. Remarque : le type LONG ou TIMESTAMP n existe pas. Il est assez recommandé d utiliser des constantes pour nommer chaque colonne, voir le cours. void drop(sqlitedatabase bdd) Cette méthode supprime totalement la table Avis de la base. Utiliser la méthode execsql. NB: utilisez l option IF EXISTS afin de parer aux erreurs de double suppression. Long insertavis(sqlitedatabase bdd, Avis avis) Cette méthode ajoute l avis indiqué à la table Avis. Vous avez deux manières de le faire. Soit utiliser la méthode execsql, soit utiliser la méthode insert. La seconde est à préférer car elle retourne l identifiant du nouveau n-uplet. Il pourrait être repris pour créer une relation, en tant que clé étrangère dans une autre table. La méthode insert est plus compliquée que execsql car il faut créer un ContentValues et mettre les colonnes dedans. Relisez le cours, transparents «Exemples de méthodes» et «Méthode insert». Regardez aussi les accesseurs de la classe Avis. En ce qui concerne la date, je vous suggère d utiliser la méthode gettimestamp de l avis. Le principe est de transformer la date en un nombre de millisecondes écoulées depuis le 01/01/1970. Ça s appelle un timestamp et si vous devez travailler avec des dates, vous passerez beaucoup de temps à convertir des timestamps en date et vice-versa. Beaucoup de SGBD possèdent les types DATE, TIME, DATETIME et TIMESTAMP, mais pas sqlite3. void updateavis(sqlitedatabase bdd, Long id, Avis avis) Cette méthode modifie le n-uplet identifié par id. En fait, c est presque la même méthode que la précédente, mais on fait UPDATE au lieu de INSERT et il faut fournir une clause de sélection. Vous pouvez également soit utiliser execsql, soit update. Relisez le cours. Si vous utilisez update, n oubliez pas de convertir l identifiant en chaîne. void deleteavis(sqlitedatabase bdd, Long id) Cette méthode supprime le n-uplet identifié par id. 2

Avis getavis(sqlitedatabase bdd, Long id) Cette méthode retourne un nouvel objet Avis construit à partir du n-uplet identifié par id. Elle crée un curseur, effectue une requête par rawquery et extrait les colonnes qu elle place dans un nouvel avis retourné en résultat, puis elle ferme le curseur. La création d un Avis à partir d un curseur se fait avec une méthode statique de la classe TableAvis appelée fromcursor que je vous invite à aller voir. 1.3. Helper pour gérer la base de données L étape suivante consiste à créer un helper pour gérer la base de données. Vous avez juste à compléter celui qui est fourni, comme dans le cours : rajoutez-lui l appel qui crée la table Avis et celui qui supprime la table. Vous comprenez que dans une application ayant plusieurs tables, il faudrait mettre tous les appels aux fonctions de création nécessaires et dans le bon ordre pour respecter les contraintes de clés étrangères. Maintenant, l objectif est de supprimer partout le ArrayList global de l application et de mettre des appels aux méthodes de TableAvis à la place. 1.4. MainActivity Il y a quelques transformations pour remplacer le ArrayList par la base SQL. Variables membres : Rajoutez deux variables membres : MySQLiteHelper helper; SQLiteDatabase bdd; Changer le type de l adapter en CursorAdapter. Ça va entraîner des erreurs tant que tout n est pas cohérent. Méthode oncreate, devinez ce qu il faut faire des deux membres helper et bdd. La réponse est donnée dans le cours, transparent intitulé «Retour à l application». La base doit être ouverte en écriture si vous avez mis en place le menu contextuel. ATTENTION: ne pas re-déclarer helper et bdd en tant que variables locales, il ne faut pas copier le cours tel quel. Complétez la méthode ondestroy de l activité en rajoutant la fermeture du helper. Méthode oncreate encore, vous pourrez tester deux adaptateurs différents (un seul à la fois) : Le type SimpleCursorAdapter : adapter = new SimpleCursorAdapter( this, android.r.layout.simple_list_item_2, null, new String[]{TableAvis.Libelle, TableAvis.Note}, new int[]{android.r.id.text1, android.r.id.text2}, 0); 3

C est un adaptateur qui affiche les champs dans un layout standard d Android. Il ne peut afficher que deux chaînes, un titre et un sous-titre. La note est automatiquement convertie en texte. Le type AvisCursorAdapter : adapter = new AvisCursorAdapter(this, null, R.layout.item_avis); C est un adaptateur dérivé de CursorAdapter similaire au AvisAdapter du TP4. Toujours dans oncreate, il faut créer un chargeur de curseur et le démarrer. Ça se fait avec cette ligne à la fin de la méthode : getloadermanager().initloader(avis_loader_id, null, this); Vous allez avoir une erreur quand vous ferez ça, car il faudrait que this implémente une interface. Allez voir dans le cours le transparent intitulé «Activité ou fragment d affichage d une liste». Les méthodes de cette interface sont déjà programmées, vous devez seulement rajouter l interface nécessaire à la liste implements. Mise à jour de la liste : à la place des adapter.notifydatasetchanged(), mettre : getloadermanager().restartloader(avis_loader_id, null, this); Repérez toutes les lignes marquées TODO et faites ce qui est indiqué : décommenter la ligne suivante et parfois supprimer la suivante. Pour toutes les méthodes surchargées, vous pouvez décommenter l annotation @Override. 1.5. EditActivity Comme dans MainActivity, il faut remplacer les actions sur le ArrayList global par des requêtes SQL à travers la classe TableAvis. Variables membres : Rajoutez deux variables membres : MySQLiteHelper helper; SQLiteDatabase bdd; et recopiez les mêmes instructions pour ouvrir la base, cette fois en écriture. Complétez la méthode ondestroy en rajoutant la fermeture du helper. Il faut maintenant remplacer les accès au ArrayList par un accès à la base. Par exemple, dans la méthode display : // récupérer l'item désigné par l'identifiant Avis avis = TableAvis.getAvis(bdd, identifiant); C est la méthode valider qui vous posera le plus de problèmes pour comprendre exactement ce qu il faut faire, dans quel ordre et ce qui change par rapport à la liste. 4

1.6. Nettoyage Maintenant que la base SQL a totalement remplacé le ArrayList, vous pouvez supprimer la classe AvosAvisApplication et enlever l attribut android:name de l application dans le manifeste. 1.7. Réflexion Un problème de réflexion pour finir : comment pourrait-on organiser les classes s il y avait une deuxième table dans la base. Actuellement, il n y a que la table Avis, mais si on rajoute une table Categories contenant des catégories d avis comme repas, sorties, sports, études... ; cette catégorie étant une clé étrangère dans la table Avis. Il faudrait créer une classe TableCategories avec ses requêtes comme dans TableAvis. Cela paraît assez simple si c est une relation 1-n (un avis a une et une seule catégorie, mais une catégorie peut concerner plusieurs avis). Lors de la création de la base de données, il faut appeler la méthode de création des deux tables dans le bon ordre. Ensuite, l un des traitements est l ajout d un avis ayant une nouvelle catégorie, il faut insérer la catégorie, récupérer son identifiant puis insérer l avis. À moins d avoir une activité spécifiquement pour gérer les catégories et qu on ne puisse pas créer de catégorie dans un avis mais seulement choisir parmi les existantes. Mais si la relation est du type n-n (un avis peut avoir plusieurs catégories et une catégorie peut concerner plusieurs avis), représentée par une autre table (CategoriesAvis), comment pourrait-on organiser les classes et quelles méthodes elles pourraient contenir (question ouverte)? 2. Travail à rendre Rajoutez un fichier appelé exactement IMPORTANT.txt si vous avez rencontré des problèmes techniques durant le TP : plantages, erreurs inexplicables, perte du travail, etc. mais pas les problèmes dus à un manque de travail ou de compréhension. Décrivez exactement ce qui s est passé. Le correcteur pourra lire ce fichier au moment de la notation et compenser votre note. Faites un dossier zip contenant les dossiers src et res ainsi que le manifeste du projet de ce TP et déposez-le sur Moodle. 5