Bases de données et fournisseurs de contenu

Dimension: px
Commencer à balayer dès la page:

Download "Bases de données et fournisseurs de contenu"

Transcription

1 8 Bases de données et fournisseurs de contenu Au sommaire de ce chapitre : Créer des bases de données et utiliser SQLite Utiliser les fournisseurs de contenu, les curseurs et les content values pour stocker, partager et consommer des données d application Interroger des fournisseurs de contenu de façon asynchrone grâce aux chargeurs de curseurs Ajouter des fonctionnalités de recherche à vos applications Utiliser les fournisseurs de contenu natifs MediaStore, Contacts et Agenda Ce chapitre présente les mécanismes de stockage persistant d Android, en commençant par la base de données SQLite. Cette API offre une bibliothèque de bases de données SQL puissante, qui fournit une couche de persistance robuste et entièrement contrôlable. Vous apprendrez également à construire et à utiliser des fournisseurs de contenu pour stocker, partager et consommer des données structurées dans et entre vos applications. Les fournisseurs de contenu offrent une interface standard vers n importe quelle source de données en découplant la couche de stockage des données de la couche applicative. Vous verrez comment interroger les fournisseurs de contenu de façon asynchrone afin de garantir la réactivité de votre application. Bien que l accès à une base de données soit réservé à l application qui l a créée, les fournisseurs de contenu offrent à vos applications un mécanisme standard pour partager leurs données et consommer les données d autres applications notamment celles de nombreux dépôts de données natifs. Vous apprendrez également à ajouter une fonction de recherche à vos applications et à construire des fournisseurs de contenu capables de fournir des suggestions de recherche en temps réel.

2 264 Android 4 Les fournisseurs de contenu pouvant être utilisés entre les applications, vous avez la possibilité d intégrer plusieurs fournisseurs natifs dans vos propres applications, comme les contacts, l agenda et le MediaStore. Vous apprendrez à stocker et à récupérer des données de ces applications essentielles d Android afin de fournir à vos utilisateurs un plus grand confort et une intégration totale avec le système. Introduction aux bases de données Android Android assure la persistance des données structurées à l aide d une combinaison de bases de données SQLite et de fournisseurs de contenu. Les bases de données SQLite peuvent servir à stocker les données des applications au moyen d une approche structurée et gérée. Android offre une bibliothèque SQLite complète. Chaque application peut créer ses propres bases sur lesquelles elle dispose d un contrôle absolu. Si vous avez créé votre dépôt de données sous-jacent, les fournisseurs de contenu offrent une interface générique et bien définie pour l utilisation et le partage de données.bases de données SQLite Vous pouvez créer à l aide de SQLite des bases de données relationnelles indépendantes pour vos applications. Utilisez-les pour stocker et gérer des données d application complexes et structurées. Les bases de données Android sont stockées sur votre terminal (ou votre émulateur) dans le dossier /data/data/<nom_package>/databases. Toutes les bases de données sont privées et ne sont accessibles que par l application qui les a créées. La conception de bases de données est un vaste sujet qui mériterait beaucoup plus de temps que celui que nous pouvons lui accorder dans ce livre. Il faut souligner que les bonnes pratiques de conception des bases de données s appliquent sous Android. En particulier, lorsque vous créez des bases de données pour des appareils aux ressources limitées (comme des téléphones mobiles), il est important de normaliser vos données pour réduire les redondances. Fournisseurs de contenu Les fournisseurs de contenu mettent à disposition une interface pour la publication et la consommation des données, reposant sur un modèle simple d adressage par URI utilisant le schéma content://. Ils vous permettent de découpler la couche applicative de la couche de données, rendant ainsi vos applications indépendantes des sources des données en masquant les sources de données sous-jacentes. Les fournisseurs de contenu peuvent être partagés entre les applications et interrogés ; leurs enregistrements peuvent être mis à jour ou supprimés et de nouvelles données peuvent y être ajoutées. Toute application possédant les permissions appropriées peut ajouter, supprimer ou mettre à jour des données d une autre application, y compris celles des fournisseurs de contenu natifs d Android.

3 Chapitre 8 Bases de données et fournisseurs de contenu 265 Plusieurs fournisseurs de contenu natifs sont accessibles par les applications tierces, notamment le gestionnaire des contacts, la base de médias et l agenda, comme nous le verrons plus loin dans ce chapitre. En publiant vos propres fournisseurs de contenu, vous vous donnez la possibilité (ainsi qu à d autres développeurs) d incorporer et d étendre vos données dans de nouvelles applications. Introduction à SQLite SQLite est un système de gestion de bases de données relationnelles (SGBDR) bien connu. Il est : open-source ; conforme aux standards ; léger ; mono tiers. Il a été implémenté sous la forme d une bibliothèque C compacte incluse dans Android. Étant implémenté sous forme de bibliothèque et non exécuté dans un processus distinct, chaque base de données SQLite fait partie intégrante de l application qui l a créée. Cela réduit les dépendances externes, minimise la latence et simplifie le verrouillage des transactions et la synchronisation. SQLite a une réputation de grande fiabilité et il est le SGBDR choisi par de nombreux appareils électroniques, notamment beaucoup de lecteurs MP3 et de smartphones. Léger et puissant, il diffère des moteurs de bases de données conventionnels par son typage faible des colonnes, ce qui signifie que les valeurs d une colonne ne doivent pas forcément être d un seul type. Chaque valeur est typée individuellement par ligne. La conséquence en est que la vérification de type n est pas obligatoire lors de l affectation ou de l extraction des valeurs des colonnes d une ligne. Info Vous trouverez des informations complètes sur SQLite sur le site officiel sqlite.org/, en particulier sur ses forces et limites. Curseurs et Content Values Les Content Values servent à insérer de nouvelles lignes dans des tables. Chaque objet ContentValues représente une ligne de la table sous la forme d une association des noms de colonnes vers les valeurs.

4 266 Android 4 Sous Android, le résultat des requêtes est renvoyé sous la forme d objets Cursor. Ceux-ci sont des pointeurs vers les résultats et non des extractions des valeurs. Ils fournissent un moyen de contrôler votre position (ligne) dans le résultat d une requête, d où leur nom.. La classe Cursor inclut de nombreuses fonctions de déplacement dont quelques exemples suivent : movetofirst. Déplace le curseur sur la première ligne du résultat. movetonext. Déplace le curseur sur la ligne suivante. movetoprevious. Déplace le curseur sur la ligne précédente. getcount. Renvoie le nombre de lignes du résultat. getcolumnindexorthrow. Renvoie l indice de la colonne indiquée et renvoie une exception si aucune colonne de ce nom n existe. getcolumnname. Renvoie le nom de la colonne à l indice indiqué. getcolumnnames. Renvoie un tableau de chaînes contenant les noms de toutes les colonnes du curseur courant. getposition. Renvoie la position courante du curseur. Android fournit un mécanisme pratique pour garantir que les requêtes s effectuent de façon asynchrone : la classe CursorLoader et son gestionnaire associé ont été introduits par Android 3.0 (API level 11) et font désormais partie de la bibliothèque support, ce qui vous permet d en tirer profit tout en supportant les versions plus anciennes d Android. Plus loin dans ce chapitre, vous apprendrez comment interroger une base de données et extraire des valeurs spécifiques de ligne et de colonne des curseurs résultants. Utiliser des bases de données SQLite Cette section explique comment créer et utiliser les bases de données SQLite dans vos applications. Lorsque l on utilise des bases de données, il est conseillé d encapsuler la base de données sous-jacente et de n exposer que les méthodes et les constantes publiques nécessaires aux interactions avec la base en se servant d une classe utilitaire. Cette classe doit exposer les constantes de la base de données notamment les noms des colonnes nécessaires à son remplissage et à son interrogation. Plus loin dans ce chapitre, nous présenterons les fournisseurs de contenu, qui peuvent également servir à exposer ces constantes d interaction. Le Listing 8.1 montre un exemple de constantes de la base de données qui devraient être rendues publiques dans une classe utilitaire.

5 Chapitre 8 Bases de données et fournisseurs de contenu 267 Listing 8.1 : Squelette de code pour les constantes de la classe utiliitaire // Colonne index (clé) à utiliser dans les clauses where. public static final String KEY_ID="_id"; // Nom et indice de chaque colonne dans la base de données. // Ces noms doivent être évocateurs. public static final String KEY_GOLD_HOARD_NAME_COLUMN = GOLD_HOARD_NAME_COLUMN ; public static final String KEY_GOLD_HOARD_ACCESSIBLE_COLUMN = OLD_HOARD_ACCESSIBLE_COLUMN ; public static final String KEY_GOLD_HOARDED_COLUMN = GOLD_HOARDED_COLUMN ; // À faire : créer des variables publiques pour chaque colonne. Introduction à SQLiteOpenHelper SQLiteOpenHelper est une classe abstraite utilisée pour implémenter un modèle de bonnes pratiques pour la création, l ouverture et la mise à jour des bases de données. En l implémentant, vous masquez la logique utilisée pour décider si une base de données doit être créée ou mise à jour avant d être ouverte et vous garantissez que chaque opération s exécute de façon efficace. Il est conseillé de reporter la création et l ouverture des bases de données tant qu elles ne sont pas nécessaires. L objet SQLiteOpenHelper met en cache les instances de la base une fois qu elles ont été ouvertes : vous pouvez donc demander à ouvrir la base juste avant d effectuer une requête ou une transaction. Pour la même raison, il n est pas nécessaire de fermer la base de données manuellement, sauf si vous n en avez plus besoin. Info Les opérations sur les bases de données, notamment leur ouverture ou leur création, peuvent durer un certain temps. Pour être sûr que cela ne pénalisera pas le confort d utilisation de votre application, faites en sorte que toutes les transactions sur la base soient asynchrones. Le Listing 8.2 montre comment étendre SQLiteOpenHelper en redéfinissant le constructeur et les méthodes oncreate et onupgrade pour prendre en charge, respectivement, la création d une base de données et la mise à jour vers une nouvelle version. Listing 8.2 : Implémentation de SQLiteOpenHelper private static class HoardDBOpenHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = mydatabase.db ; private static final String DATABASE_TABLE = GoldHoards ; private static final int DATABASE_VERSION = 1;

6 268 Android 4 // Instruction SQL pour créer une base de données. private static final String DATABASE_CREATE = create table + DATABASE_TABLE + ( + KEY_ID + integer primary key autoincrement, + KEY_GOLD_HOARD_NAME_COLUMN + text not null, + KEY_GOLD_HOARDED_COLUMN + float, + KEY_GOLD_HOARD_ACCESSIBLE_COLUMN + integer); ; public HoardDBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // Appelée lorsque aucune base n existe sur le disque et que la classe // utilitaire doit en créer une nouvelle. public void oncreate(sqlitedatabase db) { db.execsql(database_create); // Appelée si une version de la base ne correspond pas, ce qui signifie // que la version de la base sur le disque doit être mise à jour vers // la version courante. public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // Inscrit la mise à jour de version dans le journal. Log.w( TaskDBAdapter, Mise à jour de la version + oldversion + vers la version + newversion +, ce qui détruira toutes les anciennes données ); // Mise à jour de la base existante pour se conformer à la nouvelle // version. Plusieurs versions antérieures peuvent être gérées en // comparant les valeurs de oldversion et newversion. // Le cas le plus simple consiste à supprimer l ancienne table et à // en créer une nouvelle. db.execsql( DROP TABLE IF IT EXISTS + DATABASE_TABLE); // Création d une nouvelle. oncreate(db); Info Dans cet exemple, onupgrade supprime simplement la table existante et la remplace par sa nouvelle définition. C est souvent la solution la plus simple et la plus pratique. Cependant, pour les données importantes qui ne sont pas synchronisées avec des services en ligne ou qui sont difficiles à reproduire, une meilleure approche consiste à migrer les données existantes dans la nouvelle table. Pour accéder à une base de données via cette classe utilitaire, appelez getwritabledatabase ou getreadabledatabase pour ouvrir et renvoyer, respectivement, une instance en écriture ou en lecture de la base sous-jacente.

7 Chapitre 8 Bases de données et fournisseurs de contenu 269 En coulisses, si la base n existe pas, l objet SQLiteOpenHelper exécute son gestionnaire oncreate. Si la version de la base a changé, le gestionnaire onupgrade sera lancé. Dans les deux cas, l appel à getwritabledatabase ou getreadabledatabase renverra la base de données en cache, nouvellement ouverte, nouvellement créée ou mise à jour. Lorsqu une base de données a été ouverte, le SQLiteOpenHelper met en cache la base de données qui vient d être ouverte : vous pouvez (et devriez) donc utiliser ces méthodes pour chaque interrogation ou transaction sur la base, au lieu de mettre en cache la base de données dans votre application. Un appel à getwritabledatabase peut échouer en raison d un problème d espace disque ou de permissions. Il est donc conseillé de se replier sur la méthode getreadabledatabase pour les requêtes. Dans la plupart des cas, cette méthode renverra la même instance de base de données en cache et ouverte en écriture que getwritabledatabase, sauf si la base n existe pas encore ou que les mêmes problèmes de permission ou d espace disque interviennent, auquel cas elle renverra une copie en lecture seule. Info Pour créer ou mettre à jour une base de données, celle-ci doit être ouverte en écriture. Il est donc généralement conseillé de tenter d abord de l ouvrir en écriture et de ne se replier vers une ouverture en lecture seule que si cette première tentative échoue. Ouvrir et créer des bases de données sans SQLiteOpenHelper Si vous préférez gérer directement la création, l ouverture et le contrôle de version de vos bases de données, vous pouvez utiliser la méthode openorcreatedatabase dans le contexte de l application : SQLiteDatabase db = context.openorcreatedatabase(database_name, Context.MODE_PRIVATE, null); Après avoir créé la base de données, vous devez gérer la création et les mises à jour de versions qui sont normalement prises en charge dans les gestionnaires oncreate et onupdate de SQLiteOpenHelper généralement en utilisant la méthode execsql de la base de données pour créer et supprimer les tables. Il est conseillé de reporter la création et l ouverture des bases de données tant qu elles ne sont pas nécessaires et de mettre en cache les instances de la base après leur ouverture afin de limiter les coûts que ces opérations induisent en termes d efficacité. Au minimum, ces opérations doivent être traitées de façon asynchrone pour éviter de perturber le thread principal de l application.

8 270 Android 4 Considérations sur la conception d une base de données Android Il existe plusieurs considérations spécifiques à Android que vous devrez garder à l esprit lorsque vous concevrez votre base de données. Les fichiers (comme les bitmaps ou les fichiers audio) ne sont en général pas stockés dans une base. Utilisez une chaîne pour stocker un chemin vers le fichier, de préférence une URI qualifiée. Il est recommandé, bien que non obligatoire, que toutes les tables contiennent une colonne auto-incrémentée qui servira d index unique à chaque ligne. Si vous prévoyez de partager votre table en utilisant un fournisseur de contenu, cette colonne devient obligatoire. Interroger une base de données Chaque requête sur une base de données est renvoyée sous la forme d un objet Cursor. Ceci permet à Android de gérer plus efficacement les ressources en retrouvant et en libérant les valeurs de lignes et de colonnes à la demande. Pour exécuter une requête sur une base de données, utilisez la méthode query en lui passant les éléments suivants : Un booléen facultatif indiquant si le résultat ne doit contenir que des valeurs uniques. Le nom de la table à interroger. Une projection sous forme de tableau de chaînes énumérant les colonnes à inclure dans le résultat. Une clause where définissant les lignes à ramener. Vous pouvez inclure des jokers? qui seront remplacés par les valeurs passées par le paramètre des arguments de sélection. Un tableau d arguments de sélection qui remplaceront les? de la clause where. Une clause group by qui définira comment les lignes de résultat devront être groupées. Une clause having définissant les groupes de lignes à inclure lorsque l on a indiqué une clause group by. Une chaîne décrivant l ordre des lignes ramenées. Une chaîne facultative définissant la limite du nombre de lignes ramenées. Le Listing 8.3 montre comment récupérer une sélection de lignes d une table SQLite. Listing 8.3 : Interrogation d une base de données // Précise la projection des colonnes du résultat. On renvoie l ensemble // de colonnes minimum correspondant à nos besoins. String[] result_columns = new String[] { KEY_ID, KEY_GOLD_HOARD_ACCESSIBLE_COLUMN, KEY_GOLD_HOARDED_COLUMN ;

9 Chapitre 8 Bases de données et fournisseurs de contenu 271 // Clause where pour limiter le nombre de lignes du résultat. String where = KEY_GOLD_HOARD_ACCESSIBLE_COLUMN + =1 ; // À remplacer par des instructions SQL valides en fonction des besoins. String whereargs[] = null; String groupby = null; String having = null; String order = null; SQLiteDatabase db = hoarddbopenhelper.getwritabledatabase(); Cursor cursor = db.query(hoarddbopenhelper.database_table, result_columns, where, whereargs, groupby, having, order); Info Dans le Listing 8.3, on ouvre une instance de base de données SQLite à l aide de l implémentation de SQLiteOpenHelper, qui reporte la création et l ouverture des instances de base tant qu elles ne sont pas nécessaires et les met en cache après leur ouverture. En conséquence, il est conseillé de demander une instance de base de données chaque fois que l on effectue une requête ou une transaction sur la base. Pour des raisons d efficacité, vous ne devriez fermer votre instance de base de données que si vous pensez que vous n en aurez plus besoin typiquement, lorsque l activité ou le service qui l utilise est stoppé. Extraire les résultats d un curseur Pour extraire les valeurs d un curseur, utilisez d abord les méthodes moveto<location> décrites plus haut pour positionner le curseur sur la bonne ligne puis utilisez les méthodes get<type> (en passant l indice de colonne) pour récupérer la valeur d une colonne de la ligne courante. Pour trouver l indice d une colonne particulière dans un curseur, servez-vous de ses méthodes getcolumnindexorthrow et getcolumnindex. Lorsque la colonne est censée exister dans tous les cas, il est conseillé d utiliser getcolumnindexorthrow. En revanche, appeler getcolumnindex et tester qu elle renvoie 1, comme on le fait dans l extrait ci-dessous, est une technique plus efficace que la capture des exceptions lorsque la colonne peut ne pas exister dans certains cas. int columnindex = cursor.getcolumnindex(key_column_1_name); if (columnindex > -1) { String columnvalue = cursor.getstring(columnindex); // Traiter la valeur de la colonne. else { // Faire quelque chose d autre si la colonne n existe pas. Info Les implémentations de bases de données doivent publier des constantes statiques qui donnent les noms des colonnes. Ces constantes statiques sont généralement exposées par la classe utilitaire ou le fournisseur de contenu.

10 272 Android 4 Le Listing 8.4 montre comment parcourir un curseur et extraire une colonne de valeurs flottantes pour en faire la moyenne. Listing 8.4 : Extraction des valeurs d un Cursor float totalhoard = 0f; float averagehoard = 0f; // Trouve l indice de la (les) colonne(s) utilisée(s). int GOLD_HOARDED_COLUMN_INDEX = cursor.getcolumnindexorthrow(key_gold_hoarded_column); // Parcourt les lignes du curseur. // Le curseur est positionné avant la première ligne lorsqu il est // initialisé : on peut donc simplement vérifier si une colonne "suivante" // existe. Si le curseur est vide, l appel renverra false. while (cursor.movetonext()) { float hoard = cursor.getfloat(gold_hoarded_column_index); totalhoard += hoard; // Calcule une moyenne en vérifiant les divisions par zéro. float cursorcount = cursor.getcount(); averagehoard = cursorcount > 0? (totalhoard / cursorcount) : Float.NaN; // Fermeture du curseur lorsque l on n en a plus besoin. cursor.close(); Les colonnes des bases SQLite étant faiblement typées, vous pouvez les transtyper en types valides selon vos besoins. Les valeurs stockées en virgules flottantes peuvent, par exemple, être lues comme des chaînes. Lorsque vous avez fini d utiliser le curseur, il est important de le fermer pour éviter les fuites mémoire et pour réduire les ressources utilisées par l application : cursor.close(); Ajouter, mettre à jour et supprimer des lignes La classe SQLiteDatabase expose les méthodes insert, delete et update qui encapsulent les instructions SQL requises pour ces actions. De plus, la méthode execsql vous permet d exécuter n importe quelle instruction SQL valide sur vos tables si vous souhaitez exécuter ces opérations (ou d autres) manuellement. Chaque fois que vous modifiez des valeurs de la base sous-jacente, vous devez mettre à jour vos curseurs en exécutant une nouvelle requête. Insérer de nouvelles lignes Pour créer une nouvelle ligne, construisez un objet ContentValues et utilisez sa méthode put pour ajouter des paires nom/valeur représentant chaque nom de colonne et sa valeur associée.

11 Chapitre 8 Bases de données et fournisseurs de contenu 273 Insérez la nouvelle ligne en passant cet objet à la méthode insert de la base cible, ainsi que le nom de la table (voir le Listing 8.5). Listing 8.5 : Insertion de nouvelles lignes dans une base // Crée une nouvelle ligne à insérer. ContentValues newvalues = new ContentValues(); // Affecte des valeurs à chaque ligne. newvalues.put(key_gold_hoard_name_column, hoardname); newvalues.put(key_gold_hoarded_column, hoardvalue); newvalues.put(key_gold_hoard_accessible_column, hoardaccessible); // [... Répéter pour chaque paire nom/valeur de colonne... ] // Insère la ligne. SQLiteDatabase db = hoarddbopenhelper.getwritabledatabase(); db.insert(hoarddbopenhelper.database_table, null, newvalues); Info Le second paramètre passé à insert dans le Listing 8.5 est appelé "astuce de la colonne null". Si vous voulez ajouter une ligne vide dans une base de données SQLite en passant un objet ContentValues vide, vous devez également passer le nom d une colonne dont la valeur est explicitement fixée à null. Lorsque vous insérez une nouvelle ligne dans une base de données SQLite, vous devez toujours préciser au moins une colonne et sa valeur correspondante qui peut être null. Si le second paramètre de insert est null, comme avec l astuce de la colonne null, l insertion d un objet ContentValues vide lèvera une exception. Il est généralement préférable de s assurer que votre code ne tente pas d insérer des ContentValues vides dans une base de données SQLite. Mettre à jour des lignes La mise à jour se fait également avec des valeurs de contenus. Créez un nouvel objet ContentValues et utilisez la méthode put pour affecter de nouvelles valeurs à chaque colonne que vous voulez mettre à jour. Appelez update sur la base de données en lui passant le nom de la table, l objet ContentValues modifié et une clause where précisant la ou les lignes à mettre à jour (voir le Listing 8.6). Listing 8.6 : Mise à jour d une ligne // Définit le contenu de la ligne mise à jour. ContentValues updatedvalues = new ContentValues(); // Affecte une valeur pour chaque ligne. updatedvalues.put(key_gold_hoarded_column, newhoardvalue); [... Répéter pour chaque colonne à modifier... ]

12 274 Android 4 // Création d une clause where définissant les lignes qui devront // être mises à jour. Définit les paramètres éventuels de where. String where = KEY_ID + "=" + hoardid; String whereargs[] = null; // Met à jour la ligne indiquée par where avec les nouvelles valeurs. SQLiteDatabase db = hoarddbopenhelper.getwritabledatabase(); db.update(hoarddbopenhelper.database_table, updatedvalues, where, whereargs); Supprimer des lignes Pour supprimer une ligne, appelez simplement delete sur la base en indiquant le nom de la table et une clause where ramenant les lignes que vous voulez supprimer (voir le Listing 8.7). Listing 8.7 : Suppression d une ligne // Créer une clause where précisant la ou les lignes à supprimer. // Définit les paramètres éventuels de where. String where = KEY_GOLD_HOARDED_COLUMN + =0 ; String whereargs[] = null; // Supprime les lignes correspondant à la clause where. SQLiteDatabase db = hoarddbopenhelper.getwritabledatabase(); db.delete(hoarddbopenhelper.database_table, where, whereargs); Créer des fournisseurs de contenu Les fournisseurs de contenu offrent une interface pour la publication de données qui seront consommées à l aide d un résolveur de contenus. Ils permettent de découpler les sources de données sous-jacentes et les composants applicatifs qui consomment les données, offrant ainsi un mécanisme générique grâce auquel les applications peuvent partager leurs données ou consommer les données fournies par d autres. Pour créer un nouveau fournisseur de contenu, étendez la classe abstraite ContentProvider : public class MyContentProvider extends ContentProvider Comme pour la classe utilitaire décrite dans la section précédente, il est conseillé de définir des constantes statiques dans cette classe notamment les noms des colonnes et l autorité du fournisseur de contenu qui seront requises par la suite pour effectuer des transactions sur la base de données ou pour l interroger. Vous devez également redéfinir la méthode oncreate pour créer (et initialiser) la source de données sous-jacente, ainsi que les méthodes query, update, delete, insert et gettype pour implémenter l interface utilisée par le résolveur de contenus pour interagir avec les données, comme nous l expliquons dans les sections qui suivent.

13 Chapitre 8 Bases de données et fournisseurs de contenu 275 Enregistrer les fournisseurs de contenu Comme les activités et les services, les fournisseurs de contenu doivent être enregistrés dans le manifeste de votre application pour que le résolveur puisse les découvrir. Pour cela, on utilise la balise provider qui dispose d un attribut name fournissant le nom de la classe du fournisseur et d un attribut authorities qui définit l URI de base de l autorité du fournisseur. Cette autorité du fournisseur de contenu est utilisée par le résolveur de contenus comme une adresse et permet de retrouver la base de données avec laquelle on souhaite interagir. Chaque autorité de fournisseur devant être unique, il est conseillé d utiliser le chemin du nom de votre paquetage pour construire cette URI. La forme générale de l autorité d un fournisseur de contenu est donc : com.<nomsociété>.provider.<nomapplication>. Une balise provider complète doit ressembler à cet exemple : <provider android:name=.mycontentprovider android:authorities= com.paad.skeletondatabaseprovider /> Publier l URI de votre fournisseur de contenu Chaque fournisseur de contenu devrait exposer son autorité en utilisant une propriété statique publique CONTENT_URI afin qu elle soit plus facilement découverte. Cette propriété devrait contenir un chemin d accès vers le contenu primaire : public static final Uri CONTENT_URI = Uri.parse( content://com.paad.skeletondatabaseprovider/elements ); Ces URI de contenu seront utilisées par un résolveur de contenus pour accéder à votre fournisseur. Une requête utilisant l URI ci-dessus représente une requête de toutes les lignes, alors qu une URI se terminant par /<numéro de ligne>, comme dans l exemple ci-dessous, permet de créer une requête d une seule ligne : content://com.paad.skeletondatabaseprovider/elements/5 Il est conseillé de supporter ces deux formes d accès à votre fournisseur. Le moyen le plus simple d y parvenir consiste à utiliser un UriMatcher pour analyser les URI et déterminer leurs formes. Le Listing 8.8 montre un squelette d implémentation pour définir un analyseur d URI qui détermine si une URI est une requête de toutes les données ou d une simple ligne. Listing 8.8 : Définition d un UriMatcher pour déterminer si une requête porte sur tous les éléments ou sur une seule ligne // Crée les constantes utilisées pour différencier les requêtes private static final int ALLROWS = 1; private static final int SINGLE_ROW = 2;

14 276 Android 4 private static final UriMatcher urimatcher; // Remplit l objet UriMatcher, où une URI se terminant par // elements correspondra à une requête de tous les éléments et // elements/[rowid] correspondra à une requête d une seule ligne. static { urimatcher = new UriMatcher(UriMatcher.NO_MATCH); urimatcher.adduri( com.paad.skeletondatabaseprovider, elements, ALLROWS); urimatcher.adduri( com.paad.skeletondatabaseprovider, elements/#, SINGLE_ROW); Vous pouvez utiliser la même technique pour exposer des URI alternatives pour différents sous-ensembles de données ou différentes tables dans votre base, en utilisant le même fournisseur de contenu. Maintenant que vous savez différencier les requêtes sur toute une table et sur une seule ligne, vous pouvez vous servir de la classe SQLiteQueryBuilder pour appliquer une condition de sélection supplémentaire à votre requête, comme dans l exemple suivant : SQLiteQueryBuilder querybuilder = new SQLiteQueryBuilder(); // Si c est une requête d une seule ligne, on limite l ensemble résultat // à la ligne transmise en paramètre. switch (urimatcher.match(uri)) { case SINGLE_ROW : String rowid = uri.getpathsegments().get(1); querybuilder.appendwhere(key_id + = + rowid); default: break; Plus loin dans ce chapitre, nous verrons comment effectuer une requête à l aide de SQLiteQueryBuilder. Créer la base de données du fournisseur de contenu Pour initialiser la source de données à laquelle vous comptez accéder au moyen du fournisseur de contenu, redéfinissez la méthode oncreate comme dans le Listing 8.9. On utilise généralement une implémentation de SQLiteOpenHelper, du type décrit dans la section précédente, afin de reporter la création et l ouverture de la base de données tant qu elle n est pas nécessaire. Listing 8.9 : Création de la base de données du fournisseur de contenu private MySQLiteOpenHelper myopenhelper; public boolean oncreate() { // Construction de la base de données sous-jacente. // Reporte l ouverture de la base tant que l on n en a pas besoin // pour une requête ou une transaction. myopenhelper = new MySQLiteOpenHelper(getContext(),

15 Chapitre 8 Bases de données et fournisseurs de contenu 277 return true; MySQLiteOpenHelper.DATABASE_NAME, null, MySQLiteOpenHelper.DATABASE_VERSION); Info Lorsque votre application est lancée, le gestionnaire oncreate de chacun de ses fournisseurs de contenu est exécuté dans le thread principal de l application. Comme pour les exemples précédents de la section précédente, la meilleure approche consiste à utiliser un SQLiteOpenHelper pour reporter l ouverture (et, si nécessaire, la création) de la base de données sous-jacente tant qu elle n est pas nécessaire dans les méthodes query et transaction du fournisseur de contenu. Pour des raisons d efficacité, il est préférable de laisser le fournisseur de contenu ouvert tant que l application s exécute ; il n est pas utile de fermer manuellement la base de données. Si le système a besoin de ressources, votre application sera tuée et les bases de données associées seront fermées. Implémenter les requêtes au fournisseur de contenu Pour supporter les requêtes à votre fournisseur de contenu, vous devez implémenter les méthodes query et gettype qui seront utilisées par les résolveurs de contenu pour accéder aux données sous-jacentes sans connaître leur structure ou leur implémentation. Ces méthodes permettent aux applications de partager leurs données sans devoir publier une interface spécifique à chaque source de données. Le scénario le plus courant consiste à utiliser un fournisseur de contenu pour offrir un accès à une base de données SQLite, mais ces méthodes permettent d accéder à n importe quelle source de données (notamment à des fichiers ou à des variables d instance de l application). Notez que l objet UriMatcher sert à affiner les requêtes et les transactions, et que l objet SQLiteQueryBuilder est un outil pratique pour réaliser des requêtes de lignes. Le Listing 8.10 est un squelette d implémentation de requêtes sur un fournisseur de contenu utilisant une base de données SQLite sous-jacente. Listing 8.10 : Implémentation de requêtes et de transactions sur un fournisseur de contenu public Cursor query(uri uri, String[] projection, String selection, String[] selectionargs, String sortorder) { // Ouverture de la base de données. SQLiteDatabase db; try { db = myopenhelper.getwritabledatabase(); catch (SQLiteException ex) {

16 278 Android 4 db = myopenhelper.getreadabledatabase(); // À remplacer par des instructions SQL valides si nécessaire. String groupby = null; String having = null; // Utilisation d un objet SQLiteQueryBuilder pour simplifier la // construction de la requête. SQLiteQueryBuilder querybuilder = new SQLiteQueryBuilder(); // Si c est une requête de ligne, on limite l ensemble résultat à // la ligne passée en paramètre. switch (urimatcher.match(uri)) { case SINGLE_ROW : String rowid = uri.getpathsegments().get(1); querybuilder.appendwhere(key_id + = + rowid); default: break; // Précise la table sur laquelle effectuer la requête. // Il peut s agir d une table spécifique ou d une jointure. querybuilder.settables(mysqliteopenhelper.database_table); // Exécute la requête. Cursor cursor = querybuilder.query(db, projection, selection, selectionargs, groupby, having, sortorder); // Renvoie le curseur résultat. return cursor; Si vous implémentez les requêtes, vous devez également préciser un type MIME pour identifier les données renvoyées. Pour cela, redéfinissez la méthode gettype pour qu elle renvoie une chaîne décrivant de façon unique le type de vos données. Le type renvoyé pourra être de deux formes une pour les entrées simples, l autre pour toutes les entrées : Élément simple : vnd.android.cursor.item/vnd.<nomsociété>.<typecontenu> Tous les éléments : vnd.android.cursor.dir/vnd.<nomsociété>.<typecontenu> Le Listing 8.11 montre comment redéfinir la méthode gettype pour qu elle renvoie le type MIME correct en fonction de l URI. Listing 8.11 : Renvoi du type MIME d un fournisseur de contenu public String gettype(uri uri) {

17 Chapitre 8 Bases de données et fournisseurs de contenu 279 // Renvoie une chaîne qui identifie le type MIME // d une URI de fournisseur de contenu. switch (urimatcher.match(uri)) { case ALLROWS: return vnd.android.cursor.dir/vnd.paad.elemental ; case SINGLE_ROW: return vnd.android.cursor.item/vnd.paad.elemental ; default: throw new IllegalArgumentException( URI non reconnue : + uri); Transactions sur un fournisseur de contenu Pour exposer les transactions de suppression, insertion et mise à jour sur votre fournisseur de contenu, implémentez les méthodes delete, insert, et update correspondantes. Comme la méthode query, ces méthodes seront utilisées par le résolveur de contenus pour effectuer les transactions sur les données sous-jacentes sans connaître leur implémentation ce qui permet aux applications de modifier des données entre elles. Il est préférable d utiliser la méthode notifychange du résolveur lorsque vous effectuez des transactions qui modifient les données des tables. Celle-ci préviendra les observateurs de contenu enregistrés pour un curseur donné (à l aide de la méthode Cursor.registerContentObserver) que la table sous-jacente (ou l une de ses lignes) a été supprimée, ajoutée ou modifiée. Comme pour les requêtes, le cas d utilisation le plus fréquent est l exécution d une transaction sur une base de données SQLite, bien que ce ne soit pas obligatoire. Le Listing 8.12 est un squelette de code qui implémente des transactions sur un fournisseur de contenu utilisant une base de données SQLite sous-jacente. Listing 8.12 : Implémentation typique des transactions sur un fournisseur de contenu public int delete(uri uri, String selection, String[] selectionargs) { // Ouvre la base en lecture/écriture pour la transaction. SQLiteDatabase db = myopenhelper.getwritabledatabase(); // Si c est une URI de ligne, limite la suppression à la ligne indiquée. switch (urimatcher.match(uri)) { case SINGLE_ROW : String rowid = uri.getpathsegments().get(1); selection = KEY_ID + = + rowid + (!TextUtils.isEmpty(selection)? AND ( + selection + ) : ); default: break; // Il faut indiquer une clause where pour renvoyer le nombre d éléments // supprimés. Pour supprimer toutes les lignes et renvoyer une valeur, // passez le paramètre "1". if (selection == null) selection = 1 ;

18 280 Android 4 // Effectue la suppression. int deletecount = db.delete(mysqliteopenhelper.database_table, selection, selectionargs); // Prévient les observateurs que l ensemble des données a été modifié. getcontext().getcontentresolver().notifychange(uri, null); // Renvoie le nombre d éléments supprimés. return deletecount; public Uri insert(uri uri, ContentValues values) { // Ouvre la base en lecture/écriture pour la transaction. SQLiteDatabase db = myopenhelper.getwritabledatabase(); // Pour ajouter des lignes vides la base en passant un objet // ContentValues vide, vous devez utiliser l astuce du paramètre de // colonne null pour indiquer le nom de la colonne qui peut être mise // à null. String nullcolumnhack = null; // Insère les valeurs dans la table. long id = db.insert(mysqliteopenhelper.database_table, nullcolumnhack, values); // Construit et renvoie l URI de la ligne insérée. if (id > -1) { // Construit et renvoie l URI de la ligne insérée. Uri insertedid = ContentUris.withAppendedId(CONTENT_URI, id); // Prévient les observateurs que l ensemble des données a été modifié. getcontext().getcontentresolver().notifychange(insertedid, null); return insertedid; else return null; public int update(uri uri, ContentValues values, String selection, String[] selectionargs) { // Ouvre la base en lecture/écriture pour la transaction. SQLiteDatabase db = myopenhelper.getwritabledatabase(); // Si c est une URI de ligne, limite la modification à la ligne indiquée. switch (urimatcher.match(uri)) { case SINGLE_ROW : String rowid = uri.getpathsegments().get(1); selection = KEY_ID + = + rowid + (!TextUtils.isEmpty(selection)? AND ( + selection + ) : ); default: break; // Effectue la modification.

19 Chapitre 8 Bases de données et fournisseurs de contenu 281 int updatecount = db.update(mysqliteopenhelper.database_table, values, selection, selectionargs); // Prévient les observateurs que l ensemble des données a été modifié. getcontext().getcontentresolver().notifychange(uri, null); return updatecount; Info La classe ContentUris fournit la méthode withappendedid qui permet d ajouter facilement un identifiant de ligne à la valeur CONTENT_URI d un fournisseur de contenu. Nous l utilisons dans le Listing 8.12 pour construire l URI des lignes que l on vient d insérer et nous nous en servirons également dans les sections suivantes pour désigner une ligne particulière au cours des requêtes et des transactions sur la base de données. Stocker des fichiers dans un fournisseur de contenu Au lieu de stocker directement les gros fichiers dans votre fournisseur de contenu, vous devriez les représenter sous la forme d URI pleinement qualifiées pointant vers leur emplacement sur le système de fichiers. Pour qu une table puisse supporter les fichiers, vous devez inclure une colonne nommée _data qui contiendra le chemin vers le fichier représenté par cette ligne. Cette colonne ne devrait pas être utilisée par les applications clientes. Redéfinissez le gestionnaire openfile pour qu il renvoie un objet ParcelFileDescriptor lorsque le résolveur de contenus demande le fichier associé à cette ligne. Généralement, un fournisseur de contenu comprend deux tables, une qui ne sert qu à stocker les fichiers externes, l autre qui contient une colonne destinée à l utilisateur, contenant une référence vers les lignes de la première. Le Listing 8.13 est un squelette de redéfinition du gestionnaire openfile d un fournisseur de contenu. Ici, le nom du fichier sera représenté par l identifiant de la ligne à laquelle il appartient. Listing 8.13 : Stockage de fichiers dans un fournisseur de contenu public ParcelFileDescriptor openfile(uri uri, String mode) throws FileNotFoundException { // Trouve l identifiant de ligne et l utilise comme nom de fichier. String rowid = uri.getpathsegments().get(1); // Crée un objet fichier dans le répertoire des fichiers externes de // l application. String picsdir = Environment.DIRECTORY_PICTURES; File file = new File(getContext().getExternalFilesDir(picsDir), rowid);

20 282 Android 4 // Si le fichier n existe pas, on le crée. if (!file.exists()) { try { file.createnewfile(); catch (IOException e) { Log.d(TAG, Échec de création du fichier : + e.getmessage()); // Traduit le mode d ouvertur dans le mode correspondant pour le // ParcelFileDescriptor int filemode = 0; if (mode.contains( w )) filemode = ParcelFileDescriptor.MODE_WRITE_ONLY; if (mode.contains( r )) filemode = ParcelFileDescriptor.MODE_READ_ONLY; if (mode.contains( + )) filemode = ParcelFileDescriptor.MODE_APPEND; // Renvoie un ParcelFileDescriptor qui représente le fichier. return ParcelFileDescriptor.open(file, filemode); Info Les fichiers associés à des lignes dans la base de données étant stockés à l extérieur de celle-ci, il est important de réfléchir à l effet que devrait avoir la suppression d une ligne sur le fichier sous-jacent. Squelette d implémentation d un fournisseur de contenu Le Listing 8.14 est un squelette d implémentation d un fournisseur de contenu. Il utilise un objet SQLiteOpenHelper pour gérer la base et transmet simplement chaque requête ou transaction directement à la base de données SQLite sous-jacente. Listing 8.14 : Squelette d implémentation d un fournisseur de contenu import android.content.contentprovider; import android.content.contenturis; import android.content.contentvalues; import android.content.context; import android.content.urimatcher; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqlitedatabase.cursorfactory; import android.database.sqlite.sqliteopenhelper; import android.database.sqlite.sqlitequerybuilder; import android.net.uri; import android.text.textutils; import android.util.log;

La persistance des données avec SQLite. Jean-marc Farinone. JMF (Tous droits réservés) 1

La persistance des données avec SQLite. Jean-marc Farinone. JMF (Tous droits réservés) 1 La persistance des données avec SQLite Jean-marc Farinone JMF (Tous droits réservés) 1 Remarques sur SQLite La base de données FILENAME est stockée dans le smartphone sous /data/data/nom_package_appli/databases/filename

Plus en détail

1- Créer notre DatabaseHelper, enfant de SQLiteOpenHelper (permet de créer nos tables) 2- Créer notre Model qui contiendra les requêtes

1- Créer notre DatabaseHelper, enfant de SQLiteOpenHelper (permet de créer nos tables) 2- Créer notre Model qui contiendra les requêtes B53 Android SQLite SQLite est intégrée au moteur d exécution d Android. Il s agit d un SGBD très apprécié car il fournit une interface SQL tout en nécessitant un minimum de mémoire et en fournissant une

Plus en détail

Sauvegarde locale des données : SharedPreferences, SQLite, Files

Sauvegarde locale des données : SharedPreferences, SQLite, Files Sauvegarde locale des données : SharedPreferences,, Files Jean-Ferdinand Susini Maître de conférences au CNAM Sources : Wikipedia, developper.android.com Paris, 31/05/2015 Les SharedPreferences 2 Héritier

Plus en détail

Android Gestion des données. Rémi Forax

Android Gestion des données. Rémi Forax Android Gestion des données Rémi Forax Types de stockage Android fourni plusieurs types de stockage Données actives d'une activité (Bundle) Fichier ressources read-only (répertoire res) Préférence partageable

Plus en détail

Sauvegarder ses données sous Android :! SharedPreferences, SQLite, Files

Sauvegarder ses données sous Android :! SharedPreferences, SQLite, Files Sauvegarder ses données sous Android : SharedPreferences, SQLite, Files Jean-Ferdinand Susini Maître de conférences au CNAM Sources : Wikipedia, developper.android.com Paris, 05/06/2014 Les SharedPreferences

Plus en détail

Stockage de données sous Android

Stockage de données sous Android Stockage de données sous Android Master 2 informatique 2012-2013 Michel Chilowicz (sous licence CC By-NC-SA) Données temporaires d'une activité Une activité peut être détruite

Plus en détail

Programmation de composant mobiles aka Android

Programmation de composant mobiles aka Android Programmation de composant mobiles aka Android Wies law Zielonka October 28, 2015 ContentProvider ContentProvider gère l accès aux données pour d autres application. Les données le plus souvent une base

Plus en détail

Chapitre 5. La persistance des données

Chapitre 5. La persistance des données Chapitre 5 La persistance des données 1 Plan du chapitre 5 Comment partager des données entre applications Utilisation des Shared Preferences Utilisation du système de fichiers (dont XML) Utilisation de

Plus en détail

1. Base de données SQLite

1. Base de données SQLite 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

Plus en détail

Android, Persistance des données

Android, Persistance des données Android, Persistance des données Sébastien Jean IUT de Valence Département Informatique v1.0, 8 mars 2015 Persistance des données Certaines applications ont besoin de sauvegarder des informations entre

Plus en détail

Programmation orientée objet en langage JAVA

Programmation orientée objet en langage JAVA Programmation orientée objet en langage JAVA Connexion à une base de données avec JDBC Claude Duvallet Université du Havre UFR Sciences et Techniques 25 rue Philippe Lebon - BP 540 76058 LE HAVRE CEDEX

Plus en détail

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)

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) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

Android - Semaine 6. Android - Semaine 6. Pierre Nerzic. février-mars 2015. 1 / 60 Pierre Nerzic

Android - Semaine 6. Android - Semaine 6. Pierre Nerzic. février-mars 2015. 1 / 60 Pierre Nerzic Android - Semaine 6 Pierre Nerzic février-mars 2015 1 / 60 Pierre Nerzic Après avoir représenté une liste d'items sous forme d'un tableau en semaine 4, nous allons la stocker dans un SGBD SQL. SQLite3

Plus en détail

Programmation orientée objet en langage JAVA

Programmation orientée objet en langage JAVA Connexion à une base de données avec JDBC Programmation orientée objet en langage JAVA Connexion à une base de données avec JDBC Claude Duvallet Université du Havre UFR Sciences et Techniques 25 rue Philippe

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar Programmation - Java - Fiches du Langage Marie Beurton-Aimar Fiche Numéro 1 1.1 Structure d un programme Java Toutes les instructions se terminent par un ; Le nom du fichier qui contient une classe doit

Plus en détail

Programmation Android TP7 - WebServices

Programmation Android TP7 - WebServices 1. WebService Dans le TP6, les avis étaient stockés dans une base SQL. Cette semaine les n-uplets sont stockés sur une base de données externe gérée par un serveur HTTP sur lequel tournent des scripts

Plus en détail

Faculté I&C, Claude Petitpierre, André Maurer. Bases de données. SQL (Structured Query Language)

Faculté I&C, Claude Petitpierre, André Maurer. Bases de données. SQL (Structured Query Language) Bases de données SQL (Structured Query Language) Une base de données contient des tables idv region cepage annee Lavaux chasselas 2005 Chianti sangiovese 2002 2 Bourgogne pinot noir 2000 Le nom et le type

Plus en détail

11. MySQL. Cours Web. MySQL. 11. MySQL. 11. MySQL. Structured Query Language. Lionel Seinturier. Université Pierre & Marie Curie

11. MySQL. Cours Web. MySQL. 11. MySQL. 11. MySQL. Structured Query Language. Lionel Seinturier. Université Pierre & Marie Curie Cours Web Lionel Seinturier Université Pierre & Marie Curie Lionel.Seinturier@lip6.fr Structured Query Language Langage de manipulation des données stockées dans une base de données interrogation/insertion/modification/suppression

Plus en détail

Java DataBaseConnectivity

Java DataBaseConnectivity Java DataBaseConnectivity JDBC JDBC est une API Java (ensemble de classes et d interfaces défini par SUN et les acteurs du domaine des SGBD) permettant d accéder aux bases de données à l aide du langage

Plus en détail

Chap. 5 : Langage SQL (Structured Query Language) Pr. : Mohamed BASLAM Contact : baslam.med@gmail.com Niveau : S4 BCG Année : 2014/2015 1

Chap. 5 : Langage SQL (Structured Query Language) Pr. : Mohamed BASLAM Contact : baslam.med@gmail.com Niveau : S4 BCG Année : 2014/2015 1 Chap. 5 : Langage SQL (Structured Query Language) Pr. : Mohamed BASLAM Contact : baslam.med@gmail.com Niveau : S4 BCG Année : 2014/2015 1 Plan Généralités Langage de Définition des (LDD) Langage de Manipulation

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

Plus en détail

Licence Professionnelle Développeur Web Programmation Orientée Objets Gestion de comptes en banque (Philippe.Genoud@imag.fr)

Licence Professionnelle Développeur Web Programmation Orientée Objets Gestion de comptes en banque (Philippe.Genoud@imag.fr) Grenoble 1 IMA Informatique & Mathématiques Appliquées UNIVERSITE JOSEPH FOURIER Sciences, Technologie, Médecine Licence Professionnelle Développeur Web Programmation Orientée Objets Gestion de comptes

Plus en détail

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Algorithmique Programmation

Algorithmique Programmation Algorithmique Programmation 2ème partie DUT en alternance CNAM 2007-2008 2 Table des matières 1 Premiers Pas en Programmation Objet : les Classes et les Objets 7 1.1 Définir une Classe........................................

Plus en détail

OpenPaaS Le réseau social d'entreprise

OpenPaaS Le réseau social d'entreprise OpenPaaS Le réseau social d'entreprise Spécification des API datastore SP L2.3.1 Diffusion : Institut MinesTélécom, Télécom SudParis 1 / 12 1OpenPaaS DataBase API : ODBAPI...3 1.1Comparaison des concepts...3

Plus en détail

Atelier Web Les langages du Web Le MySQL Module 1 - Les bases

Atelier Web Les langages du Web Le MySQL Module 1 - Les bases Atelier Web Les langages du Web Le MySQL Module 1 - Les bases Définition MySQL = SGBD = Système de Gestion de Base de Données Le rôle du MySQL est de vous aider à enregistrer les données de manière organisée

Plus en détail

2011 Hakim Benameurlaine 1

2011 Hakim Benameurlaine 1 Table des matières 1 CRÉATION DES OBJETS DE BASES DE DONNÉES... 2 1.1 Architecture d une base de données... 2 1.1.1 Niveau logique... 2 1.1.2 Niveau physique... 3 1.2 Gestion d une base de données... 3

Plus en détail

NVU, Notepad++ (ou le bloc-note), MySQL, PhpMyAdmin. HTML, PHP, cas d utilisation, maquettage, programmation connaissances en HTML, PHP et SQL

NVU, Notepad++ (ou le bloc-note), MySQL, PhpMyAdmin. HTML, PHP, cas d utilisation, maquettage, programmation connaissances en HTML, PHP et SQL Prise en main de NVU et Notepad++ (conception d application web avec PHP et MySql) Propriétés Intitulé long Formation concernée Matière Présentation Description Conception de pages web dynamiques à l aide

Plus en détail

PHP & BD. PHP & Bases de données. Logiciels & matériels utilisés. Bases de données et Web

PHP & BD. PHP & Bases de données. Logiciels & matériels utilisés. Bases de données et Web PHP & Bases de données La quantité de données utilisée par certains sites web nécessite l'utilisation d'une base de données Il faut donc disposer d'un SGBD (mysql, postgresql, oracle, ) installé sur un

Plus en détail

Bypass et filtre sur les requêtes destinées à la servlet W4

Bypass et filtre sur les requêtes destinées à la servlet W4 Note technique W4 Engine Bypass et filtre sur les requêtes destinées à la servlet W4 Cette note technique décrit le filtre de contrôle du bypass de la servlet W4. Versions de W4 Engine concernées : 5.0

Plus en détail

JDBC et objet-relationnel

JDBC et objet-relationnel Types de données de SQL3 JDBC et objet-relationnel Université de Nice - Sophia Antipolis Version 1.6.4 5/11/11 Richard Grin JDBC supporte les types suivants de SQL3 qui sont des ouvertures vers le relationnelobjet

Plus en détail

Les références et la mémoire

Les références et la mémoire Chapitre 3 Les références et la mémoire 3.1 Introduction En Java, pour déclarer une variable, il faut donner son nom, précédé du type qu on souhaite lui attribuer. Ces types peuvent être des types primitifs

Plus en détail

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

Pour les débutants. langage de manipulation des données Pour les débutants SQL : langage de manipulation des données Les bases de données sont très utilisées dans les applications Web. La création, l interrogation et la manipulation des données de la base sont

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Plan. Bases de données. Cours 1 : Généralités & rappels. But du cours. Organisation du cours. Polytech Paris-Sud. Apprentis 4 ème année

Plan. Bases de données. Cours 1 : Généralités & rappels. But du cours. Organisation du cours. Polytech Paris-Sud. Apprentis 4 ème année Plan Bases de données Polytech Paris-Sud Apprentis 4 ème année Cours 1 : Généralités & rappels 1.1 Avant-propos 1.2 Algèbre relationnelle kn@lri.fr http://www.lri.fr/~kn 2/18 But du cours Organisation

Plus en détail

Java. Partie 1 : QCM. Consignes pour le bons déroulement du devoir

Java. Partie 1 : QCM. Consignes pour le bons déroulement du devoir Consignes pour le bons déroulement du devoir - Ce document comporte un QCM et une partie où il faut écrire du code en - Marquez vos réponses au QCM sur la feuille de réponses fournie (notez que certaines

Plus en détail

Java EE Approfondi - Cours 2. Cours de 2 e année ingénieur Spécialisation «Génie Informatique»

Java EE Approfondi - Cours 2. Cours de 2 e année ingénieur Spécialisation «Génie Informatique» Java EE Approfondi - Cours 2 Cours de 2 e année ingénieur Spécialisation «Génie Informatique» Présentation Lier l'orienté objet et la base de données relationnelle peut être lourd et consommateur en temps.

Plus en détail

Introduction aux Systemes d Information et aux Bases de Données

Introduction aux Systemes d Information et aux Bases de Données Introduction aux Systemes d Information et aux Bases de Données L2 Informatique Serenella Cerrito Département d Informatique Évry 2014-2015 Quels valeurs peut prendre un attribut? Ici, les types les plus

Plus en détail

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : 2-212-12055-9, ISBN 13 : 978-2-212-12055-4

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : 2-212-12055-9, ISBN 13 : 978-2-212-12055-4 SQL pour Oracle 10g Razvan Bizoï Tsoft, Groupe Eyrolles, 2006, ISBN : 2-212-12055-9, ISBN 13 : 978-2-212-12055-4 Ce guide de formation a pour but de vous permettre d'acquérir une bonne connaissance du

Plus en détail

FONCTIONS DE TRAITEMENT} COUNT

FONCTIONS DE TRAITEMENT} COUNT Nom Prénom Promotion Date Buhl Damien Année 1 Groupe 2 21 Janvier 2007 CER Prosit n 22 Mots-Clés : - Requête/Langage SQL Le langage SQL (Structured Query Language) est un langage de requêtes, il permet

Plus en détail

Introduction aux bases de données

Introduction aux bases de données 1/73 Introduction aux bases de données Formation continue Idir AIT SADOUNE idir.aitsadoune@supelec.fr École Supérieure d Électricité Département Informatique Gif sur Yvette 2012/2013 2/73 Plan 1 Introduction

Plus en détail

Travailler avec des données de type XML

Travailler avec des données de type XML Travailler avec des données de type XML Version 1.0 Z Grégory CASANOVA 2 Travailler avec des données de type XML 28/07/2009 Sommaire 1 Introduction... 3 2 Pré requis... 4 3 XML typé et non typé... 5 3.1

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1 Aujourd hui Eléments de base Variables, opérateurs, type d une expression

Plus en détail

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

Cours Bases de données 2ème année IUT Cours Bases de données 2ème année IUT Cours 6 : JDBC : ou comment lier ORACLE avec Java 1ère partie Anne Vilnat http://www.limsi.fr/individu/anne/cours Plan 1 Introduction 2 les étapes de la connexion

Plus en détail

PHP - BD. PostgreSQL. Connexion (I) Présentation

PHP - BD. PostgreSQL. Connexion (I) Présentation PHP - BD PostgreSQL S. Lanquetin LE2I Aile sciences de l'ingénieur Bureau G206 sandrine.lanquetin@u-bourgogne.fr Présentation Connexion (I) PostgreSQL s'appuie sur le modèle relationnel mais apporte les

Plus en détail

Oracle Database 10g: Les fondamentaux du langage SQL I

Oracle Database 10g: Les fondamentaux du langage SQL I Oracle University Appelez-nous: +33 (0) 1 57 60 20 81 Oracle Database 10g: Les fondamentaux du langage SQL I Durée: 3 Jours Description Ce cours offre aux étudiants une introduction à la technologie de

Plus en détail

SQL SERVER 2008 Le 20/10/2010

SQL SERVER 2008 Le 20/10/2010 Définitions SQL SERVER 2008 Le 20/10/2010 Une base de données est un objet particulièrement difficile à définir puisqu il est abordé en pratique selon différents points de vue : Pour un administrateur,

Plus en détail

PG208, Projet n 1 : Gestion d une bibliothèque

PG208, Projet n 1 : Gestion d une bibliothèque PG208, Projet n 1 : Gestion d une bibliothèque Bertrand LE GAL, Serge BOUTER et Clément VUCHENER Filière électronique 2 eme année - Année universitaire 2011-2012 1 Introduction 1.1 Objectif du projet L

Plus en détail

Dans l'article précédent, vous avez appris

Dans l'article précédent, vous avez appris Pour les débutants Les différents formats de sortie proposés par PHPExcel La bibliothèque orientée objet PHPExcel permet de lire et créer des fichiers pour tableurs. Dans cette série d articles, vous apprendrez

Plus en détail

Développer en PL/SQL. Sommaire du cours

Développer en PL/SQL. Sommaire du cours Sommaire du cours Module 1 Introduction et Rappels Module 2 Eléments de langage PL/SQL Module 3 Accès à la Base de données Module 4 Traitements stockés Module 5 Gestion des exceptions Module 6 - Compléments

Plus en détail

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris : Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens

Plus en détail

PHP. virginie.sans@irisa.fr http://perso.univ-rennes1.fr/virginie.sans/pwb. Internet et HTML

PHP. virginie.sans@irisa.fr http://perso.univ-rennes1.fr/virginie.sans/pwb. Internet et HTML PHP virginie.sans@irisa.fr http://perso.univ-rennes1.fr/virginie.sans/ BUR Internet et HTML PHP, qu'est-ce que c'est? Un langage pour la programmation du serveur Permet d'inclure des parties programmées

Plus en détail

Workshop CAS et évaluation d expressions. Raphaël Shugo Boissel (boisse_r)

Workshop CAS et évaluation d expressions. Raphaël Shugo Boissel (boisse_r) Workshop CAS et évaluation d expressions Raphaël Shugo Boissel (boisse_r) 23 Novembre 2013 1 Présentation du workshop.................... 2 1.1 Définition du cas..................... 2 1.2 Définition de

Plus en détail

Introduction à ADO.NET

Introduction à ADO.NET 1 Introduction à ADO.NET Introduction à ADO.NET Sommaire Introduction à ADO.NET... 1 1 Introduction... 2 1.1 Qu est ce que l ADO.NET?... 2 1.2 Les nouveautés d ADO.NET... 2 1.3 Les avantages d ADO.NET...

Plus en détail

PHP /MySQL Interface d'accès aux BDDs PDO. Youssef CHAHIR

PHP /MySQL Interface d'accès aux BDDs PDO. Youssef CHAHIR PHP /MySQL Interface d'accès aux BDDs PDO Youssef CHAHIR 1 PLAN Architecture Créer une interface PHP/MySQL : Établir une connexion Exécuter une requête Gérer les erreurs Exploiter les résultats de la requête

Plus en détail

SQL Server 2012 - SQL, Transact SQL Conception et réalisation d'une base de données

SQL Server 2012 - SQL, Transact SQL Conception et réalisation d'une base de données Le modèle relationnel 1. Introduction 9 2. Rappels sur le stockage des données 9 2.1 Les différentes catégories de données 10 2.1.1 Les données de base 10 2.1.2 Les données de mouvement 10 2.1.3 Les données

Plus en détail

Introduction Mysql API mysqli Annexe. Introduction à PHP. Web et SGBD : un exemple avec Mysql. IUT de Fontainebleau. 8 mars 2014. Introduction à PHP

Introduction Mysql API mysqli Annexe. Introduction à PHP. Web et SGBD : un exemple avec Mysql. IUT de Fontainebleau. 8 mars 2014. Introduction à PHP Web et SGBD : un exemple avec IUT de Fontainebleau 8 mars 2014 1 2 Modèle relationnel 3 4 listes des fonctions mysqli 1 2 Modèle relationnel 3 4 listes des fonctions mysqli Problématique Sites dynamiques

Plus en détail

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

Le langage SQL pour Oracle - partie 1 : SQL comme LDD Le langage SQL pour Oracle - partie 1 : SQL comme LDD 1 SQL : Introduction SQL : Structured Query Langage langage de gestion de bases de donn ees relationnelles pour Définir les données (LDD) interroger

Plus en détail

Un ordonnanceur stupide

Un ordonnanceur stupide Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire

Plus en détail

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Techniques de stockage, P. Rigaux p.1/43 Techniques de stockage Contenu de ce cours : 1. Stockage de données. Supports, fonctionnement d un disque, technologie RAID 2. Organisation

Plus en détail

PL/SQL. Pourquoi PL/SQL? Introduction. Principales caractéristiques de PL/SQL. Utilisation de PL/SQL

PL/SQL. Pourquoi PL/SQL? Introduction. Principales caractéristiques de PL/SQL. Utilisation de PL/SQL PL/SQL Avertissement : cette partie du cours n est qu un survol du langage PL/SQL, utile pour écrire des procédures stockées simples Elle laisse de côté de nombreuses fonctionnalités du langage Université

Plus en détail

Base de donnée relationnelle. Exemple de table: Film. Exemple de table: Acteur. Exemple de table: Role. Contenu de la table Role

Base de donnée relationnelle. Exemple de table: Film. Exemple de table: Acteur. Exemple de table: Role. Contenu de la table Role IFT7 Programmation Serveur Web avec PHP Introduction à MySQL Base de donnée relationnelle Une base de données relationnelle est composée de plusieurs tables possédant des relations logiques (théorie des

Plus en détail

Développement d un client REST, l application Vélib

Développement d un client REST, l application Vélib Développement d un client REST, l application Vélib Description du thème Propriétés Description Intitulé long Formation concernée Matière Présentation Application en C# qui utilise un service REST informant

Plus en détail

CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431

CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431 CONTRÔLE HORS-CLASSEMENT ÉCOLE POLYTECHNIQUE INFORMATIQUE COURS INF 431 GUILLAUME HANROT ET JEAN-JACQUES LÉVY On se propose de résoudre le problème de l affectation de k tâches à n employés (k > 0, n >

Plus en détail

Listes et arbres binaires

Listes et arbres binaires Des structures de données dynamiques Listes, Listes ordonnées Arbres binaires, arbre binaires de recherche Listes chaînées Utile si le nombre d éléments n est pas connu à l avance et évolue beaucoup. Permet

Plus en détail

Université Paris Diderot ISIFAR Année 2008-2009. Exceptions et Classes Abstraites

Université Paris Diderot ISIFAR Année 2008-2009. Exceptions et Classes Abstraites Université Paris Diderot JAVA ISIFAR Année 2008-2009 TP n 7 - Correction Exceptions et Classes Abstraites Exercice 1 [Utilisation des Exceptions] La méthode parseint est spécifiée ainsi : public static

Plus en détail

CREATION WEB DYNAMIQUE

CREATION WEB DYNAMIQUE CREATION WEB DYNAMIQUE IV ) MySQL IV-1 ) Introduction MYSQL dérive directement de SQL (Structured Query Language) qui est un langage de requêtes vers les bases de données relationnelles. Le serveur de

Plus en détail

Bases de données relationnelles

Bases de données relationnelles Bases de données relationnelles Système de Gestion de Bases de Données Une base de données est un ensemble de données mémorisé par un ordinateur, organisé selon un modèle et accessible à de nombreuses

Plus en détail

Éléments de base en Java (suite et fin)

Éléments de base en Java (suite et fin) Éléments de base en Java (suite et fin) P.O.O. LMI 2 Semestre 4 Option Info Année 2008-09 1/33 Éléments de base en Java (suite et fin) Année 2008-09 Plan du cours Les chaînes de caractères Retour vers

Plus en détail

Cours de Base de Données Cours n.2 Introduction à MySQL/PhPMyAdmin

Cours de Base de Données Cours n.2 Introduction à MySQL/PhPMyAdmin Cours de Base de Données Cours n.2 Introduction à MySQL/PhPMyAdmin Ce cours reprend beaucoup de transparents du cours de Philippe LAHIRE Elisabetta De Maria - edemaria@i3s.unice.fr UFR Sciences et Laboratoire

Plus en détail

Révisions sur les Bases de données. Lycée Thiers - PC/PC*

Révisions sur les Bases de données. Lycée Thiers - PC/PC* Bases de données Architecture clients-serveur Architecture trois tiers Vocabulaire des BDD Algèbre relationnelle Création/modification d une table Commandes SQL de manipulation de tables Définition formelle

Plus en détail

LP DAM. BDD Client. IUT Informatique Université de Nice-Sophia Antipolis. Macha DA COSTA - machada.fr - macha.dacosta@gmail.com

LP DAM. BDD Client. IUT Informatique Université de Nice-Sophia Antipolis. Macha DA COSTA - machada.fr - macha.dacosta@gmail.com LP DAM BDD Client IUT Informatique Université de Nice-Sophia Antipolis Macha DA COSTA - machada.fr - macha.dacosta@gmail.com Résumé séances précédentes L architecture Client-Serveur Les applications Clientes

Plus en détail

PHP /MySQL Interface d'accès aux BDDs PDO. Youssef CHAHIR

PHP /MySQL Interface d'accès aux BDDs PDO. Youssef CHAHIR PHP /MySQL Interface d'accès aux BDDs PDO Youssef CHAHIR 1 PLAN Architecture Interface phpmyadmin Créer une interface PHP/MySQL : Établir une connexion Exécuter une requête Gérer les erreurs Exploiter

Plus en détail

Rapport Gestion de projet

Rapport Gestion de projet IN56 Printemps 2008 Rapport Gestion de projet Binôme : Alexandre HAFFNER Nicolas MONNERET Enseignant : Nathanaël COTTIN Sommaire Description du projet... 2 Fonctionnalités... 2 Navigation... 4 Description

Plus en détail

Une introduction au langage C++ Marc Jachym, Lurpa

Une introduction au langage C++ Marc Jachym, Lurpa Une introduction au langage C++ Marc Jachym, Lurpa Janvier 2008 À l origine, le langage C Langage procédural créé dans les années 1970 aux laboratoires Bell (ATT : télécoms américains) en vue d écrire

Plus en détail

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan

CSC4002 : Contrôle Final Session 1. Date : jeudi 26 janvier 2012 Durée : 1H30. Coordonnateurs : Christian Bac et Denis Conan Corrigé et Barème Contrôle de connaissances 2011/2012 des étudiants de 2 è année (EI2) CSC4002 : Contrôle Final Session 1 Date : jeudi 26 janvier 2012 Durée : 1H30 Coordonnateurs : Christian Bac et Denis

Plus en détail

Chapitre 7. Persistance et partage des données

Chapitre 7. Persistance et partage des données Chapitre 7: Persistance et partage des données 135 Chapitre 7 Persistance et partage des données Chapitre 7: Persistance et partage des données 136 1 Introduction Android offre plusieurs méthodes pour

Plus en détail

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

TP1 - Corrigé. Manipulations de données

TP1 - Corrigé. Manipulations de données TP1 - Corrigé Manipulations de données 1. Démarrez mysql comme suit : bash$ mysql -h 127.0.0.1 -u user4 -D db_4 p Remarque: le mot de passe est le nom de user. Ici user4 2. Afficher la liste des bases

Plus en détail

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

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013 NFA 008 Introduction à NoSQL et MongoDB 25/05/2013 1 NoSQL, c'est à dire? Les bases de données NoSQL restent des bases de données mais on met l'accent sur L'aspect NON-relationnel L'architecture distribuée

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Les procédures stockées et les fonctions utilisateur

Les procédures stockées et les fonctions utilisateur Les procédures stockées et les fonctions utilisateur Z Grégory CASANOVA 2 Les procédures stockées et les fonctions utilisateur [08/07/09] Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les procédures

Plus en détail

Base de données - Tableaux Query Rapport de projet

Base de données - Tableaux Query Rapport de projet Base de données - Tableaux Query Rapport de projet Xavier Dubuc 30 mars 2009 Table des matières 1 Introduction. 2 1.1 Qu est-ce qu un tableau query?................................. 2 1.2 Le tupple résumé..........................................

Plus en détail

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5

Claude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Claude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 3 Les fonctions Rappels Généralités Une fonction est un bloc d instructions éventuellement

Plus en détail

II. EXCEL/QUERY ET SQL

II. EXCEL/QUERY ET SQL I. AU TRAVAIL, SQL! 1. Qu est-ce que SQL?... 19 2. SQL est un indépendant... 19 3. Comment est structuré le SQL?... 20 4. Base, table et champ... 21 5. Quelle est la syntaxe générale des instructions SQL?...

Plus en détail

Module Com231A - Web et Bases de Données Notion 3 : SQL

Module Com231A - Web et Bases de Données Notion 3 : SQL Module Com231A - Web et Bases de Données Notion 3 : SQL Qu est ce qu une base de données? Introduction Une base de données est un ensemble d au moins un tableau contenant des données. Exemple : une base

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Web dynamique. Techniques, outils, applications. (Partie C)

Web dynamique. Techniques, outils, applications. (Partie C) Web dynamique Techniques, outils, applications (Partie C) Nadir Boussoukaia - 2006 1 SOMMAIRE 1. MySQL et PHP (20 min) 2. SQL (petits rappels) (20 min) 2 MySQL et PHP Synthèse 3 MySQL et PHP SGBD MySQL

Plus en détail

Utiliser Access ou Excel pour gérer vos données

Utiliser Access ou Excel pour gérer vos données Page 1 of 5 Microsoft Office Access Utiliser Access ou Excel pour gérer vos données S'applique à : Microsoft Office Access 2007 Masquer tout Les programmes de feuilles de calcul automatisées, tels que

Plus en détail

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

PHP 5. La base de données MySql. A. Belaïd 1 PHP 5 La base de données MySql A. Belaïd 1 Base de données C est quoi une base de données? Une base de données contient une ou plusieurs tables, chaque table ayant un ou plusieurs enregistrements Exemple

Plus en détail

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

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications P.-A. Sunier, HEG-Arc Neuchâtel avec le concours de J. Greub pierre-andre.sunier@he-arc.ch http://lgl.isnetne.ch/

Plus en détail

Sauvegardes de données

Sauvegardes de données 1 Sauvegardes de données Sauvegardes de données Sommaire Sauvegardes de données... 1 1 Introduction... 2 2 Recherche du chemin de stockage... 3 2.1 Le dossier de jeu... 3 2.2 Le dossier privé... 5 3 Gestion

Plus en détail

Université Paris 1 Panthéon Sorbonne UFR 06. Fiche de TD VBA

Université Paris 1 Panthéon Sorbonne UFR 06. Fiche de TD VBA 1 / 13 Fiche de TD VBA L objectif de cette fiche est de faire un rappel (voire une présentation rapide) du langage de programmation VBA et de son usage sur des documents Excel et Access. Pour rappel, VBA

Plus en détail

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni :

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : TP n 9 Xml/Json 1) Exemple d application analysant un fichier XML L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : Ce fichier

Plus en détail

Cours 2 : SQL Structured Query Language

Cours 2 : SQL Structured Query Language Cours 2 : SQL Structured Query Language SQL Langage permettant de définir, manipuler et contrôler les données d une BD relationnelle Objet d une norme de l Institut National Américain de Normalisation

Plus en détail

SGBD orientés objet. Généralités Modèles de données et SGBD orientés objet 03/03/2015. Définitions. Concepts Généraux

SGBD orientés objet. Généralités Modèles de données et SGBD orientés objet 03/03/2015. Définitions. Concepts Généraux SGBD orientés objet Définitions Généralités Modèles de données et SGBD orientés objet MDOO : Un modèle de données qui capture la sémantique des objets supportée en programmation objet. Concepts Généraux

Plus en détail