Bases de données. Programmation Mobile Android Master CCI. Définition du modèle. Définition du SQLiteOpenHelper

Documents pareils
Bases de données et fournisseurs de contenu

Stockage de données sous Android

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

Projet Android (LI260) Cours 2

1. Base de données SQLite

Programmation Android L3 informatique

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

Programmation Orientée Objet Java

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

OpenPaaS Le réseau social d'entreprise

Programmation Orientée Objet

Programmer en JAVA. par Tama

CREATION WEB DYNAMIQUE

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

Historisation des données

TP SIN Programmation sur androïde Support : eclipse

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

Programmation Mobile Android Master CCI

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

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

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

Olivier Mondet

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

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

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)

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

Projet de programmation (IK3) : TP n 1 Correction

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

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

Corrigé des exercices sur les références

Développement sous Android

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

Exercices sur SQL server 2000

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

Les BASES de DONNEES dans WampServer

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

TP au menu «UI ANDROID»

SQL Historique

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

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

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)

Package Java.util Classe générique

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

Programmation avec des objets : Cours 7. Menu du jour

TD/TP PAC - Programmation n 3

Créer des applications Android

Le Langage De Description De Données(LDD)

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

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

Tutoriel Android. Pour démarrer la programmation d'applications Android

Un ordonnanceur stupide

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

Programmation Par Objets

Warren PAULUS. Android SDK et Android x86

Devoir Data WareHouse

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

TP Contraintes - Triggers

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Gestion du cache dans les applications ASP.NET

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

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

[BASE DE DONNEES MULTIMEDIA]

Corrigés détaillés des exercices

Construire des plug-ins pour SAS Management Console SAS 9.1

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Android UIThread, Thread, Handler et AsyncTask

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Bases de SQL. Hacks 1-6 CHAPITRE UN

Design patterns. Design patterns - définition. Design patterns - avantages

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Programmation par les Objets en Java

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

TP3 : Creation de tables 1 seance

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

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Une introduction à Java

TD/TP PAC - Programmation n 3

Java Licence Professionnelle CISII,

Premiers Pas en Programmation Objet : les Classes et les Objets

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

MS SQL Express 2005 Sauvegarde des données

Applet pour visualiser les variables «automate» notifiées

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Création et Gestion des tables

Développement Web - Object Relational Mapping and Hibernate

Réplication logique avec PostgreSQL 9.4

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

BTS/CGO P10 SYSTEME INFORMATION Année

I4 : Bases de Données

Langage Java. Classe de première SI

1. Installation d'un serveur d'application JBoss:

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

Plan du cours. Historique du langage Nouveautés de Java 7

Transcription:

SQLite Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Nous allons voir comment stocker de l information structurée sous la forme d une base de données SQLite Pour cela, nous allons : définir un modèle de données (les tables) ; représenter ce modèle sous la forme de classes ; définir un SQL Helper pour faciliter la création des tables ; voir comment modifier, consulter les données Bertrand Estellon (AMU) Android Master CCI March 23, 2015 1 / 266 Définition du modèle Définition du modèle de données, c est-à-dire, les tables : Bertrand Estellon (AMU) Android Master CCI March 23, 2015 203 / 266 Construction des instructions SQL à partir de la définition du modèle : public class DatabaseContract { public interface Articles extends BaseColumns { String tablename = "articles"; String columnguid = "guid"; String columnguidtype = "TEXT"; String columntitle = "title"; String columntitletype = "TEXT"; String columncontent = "content"; String columncontenttype = "TEXT"; Les autres types possibles : NULL, INTEGER, REAL et BLOB ; Il peut y avoir plusieurs tables private static final String SQLCreateTableArticles = "CREATE TABLE " + DatabaseContractArticlestableName + " (" + DatabaseContractArticles_ID + " INTEGER PRIMARY KEY," + DatabaseContractArticlescolumnGuid + " " + DatabaseContractArticlescolumnGuidType + ", " + DatabaseContractArticlescolumnTitle + " " + DatabaseContractArticlescolumnTitleType + ", " + DatabaseContractArticlescolumnContent + " " + DatabaseContractArticlescolumnContentType + " )"; private static final String SQLDeleteTableArticles = "DROP TABLE IF EXISTS " + DatabaseContractArticlestableName; Bertrand Estellon (AMU) Android Master CCI March 23, 2015 204 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 205 / 266

Création de la base de données : public static final int databaseversion = 1; public static final String databasename = "articlesdb"; public DatabaseOpenHelper(Context context) { super(context, databasename, null, databaseversion); public void oncreate(sqlitedatabase database) { databaseexecsql(sqlcreatetablearticles); Mise à jour de la base de données lors d un changement de version : public static final int databaseversion = 1; public void onupgrade(sqlitedatabase database, int oldversion, int newversion) { databaseexecsql(sqldeletetablearticles); oncreate(database); public void ondowngrade(sqlitedatabase database, int oldversion, int newversion) { onupgrade(database, oldversion, newversion); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 206 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 207 / 266 Avant d utiliser le SQLiteOpenHelper, il faut l instancier : databaseopenhelper = new DatabaseOpenHelper(context); Insertion (INSERT INTO) : public void insert(article article) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); valuesput(databasecontractarticlescolumnguid, articleguid); valuesput(databasecontractarticlescolumncontent, articlecontent); valuesput(databasecontractarticlescolumntitle, articletitle); databaseinsert(databasecontractarticlestablename, null, values); Mise en jour (UPDATE) : public void update(article article) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); valuesput(databasecontractarticlescolumncontent, articlecontent); valuesput(databasecontractarticlescolumntitle, articletitle); String selection = DatabaseContractArticlescolumnGuid + " =?"; String[] selectionargs = {articleguid; databaseupdate(databasecontractarticlestablename, values, selection, selectionargs); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 208 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 209 / 266

SELECT * FROM articles : Suppression DELETE : public void delete(string guid) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); String selection = DatabaseContractArticlescolumnGuid + " =?"; String[] selectionargs = {guid; databasedelete(databasecontractarticlestablename, selection, selectionargs); public Cursor getarticles() { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); return databasequery(databasecontractarticlestablename, null, null, new String[]{, null, null, null); SELECT guild, title FROM articles WHERE title LIKE "%s%" : public Cursor getarticles(string s) { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); String selection = DatabaseContractArticlescolumnTitle + " LIKE?"; String[] selectionargs = {"%"+s+"%"; String[] columns = { DatabaseContractArticlescolumnGuid, DatabaseContractArticlescolumnTitle; return databasequery(databasecontractarticlestablename, columns, selection, selectionargs, null, null, null); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 210 / 266 Les curseurs Bertrand Estellon (AMU) Android Master CCI March 23, 2015 211 / 266 Exemple d application 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(); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 212 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 213 / 266

Les tables En supposant que nous avons écrit le SQLiteOpenHelper : La structure de la base de données : public class DatabaseContract { public interface Items extends BaseColumns { String tablename = "items"; String columntext = "text"; String columntexttype = "TEXT"; private DatabaseOpenHelper databaseopenhelper; private ItemAdapter adapter; private EditText edittext; protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); databaseopenhelper = new DatabaseOpenHelper(this); setcontentview(rlayoutactivity_main); recyclerview = (RecyclerView)findViewById(RidrecyclerView); recyclerviewsetlayoutmanager(new LinearLayoutManager(this)); adapter = new ItemAdapter(getItems()); recyclerviewsetadapter(adapter); edittext = (EditText)findViewById(RideditText); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 214 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 215 / 266 Les méthodes qui interagissent avec la base de données : private DatabaseOpenHelper databaseopenhelper; private Cursor getitems() { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); return databasequery(databasecontractitemstablename, null, null, new String[]{, null, null, null); private void insertitem(string text) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); valuesput(databasecontractitemscolumntext, text); databaseinsert(databasecontractitemstablename, null, values); Traitement des clics sur le bouton Ajouter : private ItemAdapter adapter; private EditText edittext; public void onadditem(view view) { insertitem(edittextgettext()tostring()); adapterchangecursor(getitems()); edittextsettext(""); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 216 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 217 / 266

Création des vues : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { public ItemAdapter(Cursor cursor) { thiscursor = cursor; public ViewHolder oncreateviewholder(viewgroup parent, int viewtype) { View view = LayoutInflaterfrom(parentgetContext()) inflate(rlayoutitem, parent, false); ViewHolder viewholder = new ViewHolder(view); return viewholder; Mise à jour des vues et nombre d éléments dans le curseur : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { public void onbindviewholder(viewholder holder, int position) { cursormovetoposition(position); int index = cursorgetcolumnindex(databasecontractitemscolumntext); String text = cursorgetstring(index); holderbind(text); public int getitemcount() { return cursorgetcount(); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 218 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 219 / 266 Le code de ViewHolder Changement de curseur : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { public void changecursor(cursor cursor) { thiscursorclose(); thiscursor = cursor; notifydatasetchanged(); public class ViewHolder extends RecyclerViewViewHolder { private final TextView textview; public ViewHolder(View itemview) { super(itemview); textview = (TextView)itemViewfindViewById(Ridtext); public void bind(string text) { textviewsettext(text); Bertrand Estellon (AMU) Android Master CCI March 23, 2015 220 / 266 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 221 / 266