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;

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

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

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

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

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

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

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

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

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

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

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

Architecture des applications

Architecture des applications Architecture des applications Table des matières 1 Introduction 1 2 Les classes valeurs 2 2.1 Les Javaeans............................................. 2 2.2 Les différents types de Javaeans...................................

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

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

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

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

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

Le Langage SQL version Oracle

Le Langage SQL version Oracle Université de Manouba École Supérieure d Économie Numérique Département des Technologies des Systèmes d Information Le Langage SQL version Oracle Document version 1.1 Mohamed Anis BACH TOBJI anis.bach@isg.rnu.tn

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

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

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

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

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

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

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

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

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

Tp2 Emacs Développement Web

Tp2 Emacs Développement Web Tp2 Emacs Développement Web Les indications ci-dessous donnent les grandes lignes du développement. 1/ Evenement Ajax Jquery: Le code javascript jquery suivant permet d afficher un message dans un span

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

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

Bases de Données relationnelles et leurs systèmes de Gestion III.1- Définition de schémas Bases de Données relationnelles et leurs systèmes de Gestion RAPPELS Contraintes d intégrité sous Oracle Notion de vue Typage des attributs Contrainte d intégrité Intra-relation

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

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

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

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ; RÈGLES A SUIVRE POUR OPTIMISER LES REQUÊTES SQL Le but de ce rapport est d énumérer quelques règles pratiques à appliquer dans l élaboration des requêtes. Il permettra de comprendre pourquoi certaines

Plus en détail

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

Paginer les données côté serveur, mettre en cache côté client Paginer les données côté serveur, mettre en cache côté client Vous voulez sélectionner des lignes dans une table, mais celle-ci comporte trop de lignes pour qu il soit réaliste de les ramener en une seule

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

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

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

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

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)

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) PHP et mysql php_mysql PHP et mysql Code: php_mysql Originaux url: http://tecfa.unige.ch/guides/tie/html/php-mysql/php-mysql.html url: http://tecfa.unige.ch/guides/tie/pdf/files/php-mysql.pdf Auteurs et

Plus en détail

L'application WinForm et le composant d'accès aux données

L'application WinForm et le composant d'accès aux données L'application WinForm et le composant d'accès aux données Vous disposez d'un squelette de l'application AntoineVersion0- ainsi que de la base de données à restaurer dans SqlServer Bd_Antoine.dat-. Travail

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

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

I4 : Bases de Données

I4 : Bases de Données I4 : Bases de Données Passage de UML au modèle relationnel Georges LOUIS Département Réseaux et Télécommunications Université de La Rochelle Module I4 2008-2009 1 G.Louis Sommaire 1 Des classes aux tables

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

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

Projet Android (LI260) Cours 2

Projet Android (LI260) Cours 2 Projet Android (LI260) Cours 2 Nicolas Baskiotis Université Pierre et Marie Curie (UPMC) Laboratoire d Informatique de Paris 6 (LIP6) S2-2013/2014 Plan Les ressources Debug Communication entre activités

Plus en détail

Utiliser Service Broker pour les tâ ches progrâmme es dâns SQL Express

Utiliser Service Broker pour les tâ ches progrâmme es dâns SQL Express Utiliser Service Broker pour les tâ ches progrâmme es dâns SQL Express Chacun sait que SQL Express ne dispose pas de l Agent SQL qui permet l exécution automatique de tâches programmées, comme par exemple

Plus en détail

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

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

PHP 4 PARTIE : BASE DE DONNEES

PHP 4 PARTIE : BASE DE DONNEES PHP 4 PARTIE : BASE DE DONNEES 1. Introduction 2. Présentation de MySQL 3. Principe 4. Connexion 5. Interrogation 6. Extraction des données 7. Fonctions de services 8. Traitement des erreurs 9. Travaux

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

Le Langage De Description De Données(LDD)

Le Langage De Description De Données(LDD) Base de données Le Langage De Description De Données(LDD) Créer des tables Décrire les différents types de données utilisables pour les définitions de colonne Modifier la définition des tables Supprimer,

Plus en détail

Création et Gestion des tables

Création et Gestion des tables Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5

Plus en détail

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

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

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

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

8. Java et les bases de données. Olivier Curé - UMLV [page 206 ]

8. Java et les bases de données. Olivier Curé - UMLV [page 206 ] 8. Java et les bases de données Olivier Curé - UMLV [page 206 ] Java et les BD Plusieurs manières d'écrire du code Java accédant à une BD: Statement Level Interface (SLI) Solutions : SQLJ (SQL92) Call

Plus en détail

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

1. Qu'est-ce que SQL?... 2. 2. La maintenance des bases de données... 2. 3. Les manipulations des bases de données... 5 1. Qu'est-ce que SQL?... 2 2. La maintenance des bases de données... 2 2.1 La commande CREATE TABLE... 3 2.2 La commande ALTER TABLE... 4 2.3 La commande CREATE INDEX... 4 3. Les manipulations des bases

Plus en détail

Langage SQL : créer et interroger une base

Langage SQL : créer et interroger une base Langage SQL : créer et interroger une base Dans ce chapitre, nous revenons sur les principales requêtes de création de table et d accès aux données. Nous verrons aussi quelques fonctions d agrégation (MAX,

Plus en détail

Application web de gestion de comptes en banques

Application web de gestion de comptes en banques Application web de gestion de comptes en banques Objectif Réaliser une application Web permettant à un client de gérer ses comptes en banque Diagramme de cas d'utilisation 1 Les cas d'utilisation Connexion

Plus en détail

Programmation avec des objets : Cours 7. Menu du jour

Programmation avec des objets : Cours 7. Menu du jour 1 Programmation avec des objets : Cours 7 Menu du jour 1. Retour sur la classe Liste 2. Précisions sur l interface 3. Difficultés dans le cas d erreurs 4. Soulever des exceptions 5. Utilisation des Listes

Plus en détail

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail

Module FMIN358 Technologies du Web : PHP objet et l extension PDO

Module FMIN358 Technologies du Web : PHP objet et l extension PDO Module FMIN358 Technologies du Web : PHP objet et l extension PDO 1. Extensions PHP pour interfacer les bases de données relationnelles Diverses extensions comme PHP Data Objects (PDO), ADOdb, Zend db

Plus en détail

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. L3 Pro Informatique 2010-2011

Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer. L3 Pro Informatique 2010-2011 1 / 32 Développement Web - JDBC Jean-Michel Richer jean-michel.richer@univ-angers.fr http://www.info.univ-angers.fr/pub/richer L3 Pro Informatique 2010-2011 2 / 32 Plan Plan 1 Préambule 2 Utilisation de

Plus en détail

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

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives : ntroduction 1/28 2/28 Anne-Cécile Caron Licence MAGE - Bases de Données 2013-2014 Application base de données Pour le développeur : Quel est l environnement? type de client (mode client serveur, intranet,...)

Plus en détail

Partie I du TD 1 au TD 5. Bases de données et MySQL -

Partie I du TD 1 au TD 5. Bases de données et MySQL - Système d information http://www.agroparistech.fr/systeme-d-information.html Partie I du TD 1 au TD 5 - Bases de données et MySQL - Liliana Ibănescu liliana.ibanescu@agroparistech.fr UFR d informatique

Plus en détail

Olivier Mondet http://unidentified-one.net

Olivier Mondet http://unidentified-one.net T-GSI Ch.4 Le Langage SQL LDD, LCD Cet exercice guidé reprend le plan suivis lors de l intervention de formation faite pour l académie de Versailles. L objectif principal visait en la présentation du langage

Plus en détail

Bases de Données & Interfaces Web. stanislas.oger@univ-avignon.fr

Bases de Données & Interfaces Web. stanislas.oger@univ-avignon.fr Bases de Données & Interfaces Web stanislas.oger@univ-avignon.fr 1 Architecture d'un SI Web Fonctionnement Dynamique avec Base de Données 2 Idée Dynamiser les pages avec des infos venant de BDD Enregistrer

Plus en détail

Exposer ses créations : galerie photos, galerie de médias

Exposer ses créations : galerie photos, galerie de médias CHAPITRE 14 Exposer ses créations : galerie photos, galerie de médias Si l éditeur TinyMCE et le système de liens de Joomla permettent d intégrer ou de lier des médias à un article, ils restent assez limités.

Plus en détail

Généralités sur les bases de données

Généralités sur les bases de données Généralités sur les bases de données Qu est-ce donc qu une base de données? Que peut-on attendre d un système de gestion de bases de données? Que peut-on faire avec une base de données? 1 Des données?

Plus en détail

Cours 7 : Langage de définition, manipulation et contrôle des données

Cours 7 : Langage de définition, manipulation et contrôle des données Cours 7 : Langage de définition, manipulation et contrôle des données Objets d une base de données Dans un schéma Tables, vues Index, clusters, séquences, synonymes Packages, procédures, fonctions, déclencheurs

Plus en détail

Création d'un convertisseur SQL SiTools

Création d'un convertisseur SQL SiTools Création d'un convertisseur SQL SiTools 1 - Introduction Un convertisseur permet de transformer la requête SQL, envoyé par la webapp SiTools à la webapp catalog ou l'inverse. C'est à dire que cette conversion

Plus en détail

Théorie des Langages

Théorie des Langages Théorie des Langages AntLR - Générateur d analyseurs Claude Moulin Université de Technologie de Compiègne Printemps 2015 Sommaire 1 Introduction 2 AntLR ANTLR : ANother Tool for Language Recognition URL

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

1/ Présentation de SQL Server :

1/ Présentation de SQL Server : Chapitre II I Vue d ensemble de Microsoft SQL Server Chapitre I : Vue d ensemble de Microsoft SQL Server Module: SQL server Semestre 3 Année: 2010/2011 Sommaire 1/ Présentation de SQL Server 2/ Architerture

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

XML et Bases de données. XMLType Oracle XML DB

XML et Bases de données. XMLType Oracle XML DB Oracle XML DB Oracle XML DB Depuis la version 9i et de façon enrichie dans la version 10g, Oracle propose des outils pour gérer des documents XML Depuis la 10g il n'y a plus d'extraction car auparavant

Plus en détail

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

Introduction à JDBC. Accès aux bases de données en Java Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Introduction JDBC : Java Data Base Connectivity

Plus en détail

Bases de données Niveau 1 SQL - MySQL MariaDB - Cours et TP 5 DDL et DML

Bases de données Niveau 1 SQL - MySQL MariaDB - Cours et TP 5 DDL et DML Bases de données Niveau 1 SQL - MySQL MariaDB - Cours et TP 5 DDL et DML MariaDB : https://mariadb.org/ Site officiel MySQL : http://www-fr.mysql.com/ Zone pour les développeurs : http://dev.mysql.com/

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

Structure fonctionnelle d un SGBD

Structure fonctionnelle d un SGBD Fichiers et Disques Structure fonctionnelle d un SGBD Requetes Optimiseur de requetes Operateurs relationnels Methodes d acces Gestion de tampon Gestion de disque BD 1 Fichiers et Disques Lecture : Transfert

Plus en détail

Notes de cours. Introduction

Notes de cours. Introduction Notes de cours GEI 44 : STRUCTURES DE DONNÉES ET ALGORITHMES Chapitre 5 Application des piles Introduction Piles très utilisées dans les compilateurs Voici deux exemples de composants d un compilateur

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

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles) SGBDR Systèmes de Gestion de Bases de Données (Relationnelles) Plan Approches Les tâches du SGBD Les transactions Approche 1 Systèmes traditionnels basés sur des fichiers Application 1 Gestion clients

Plus en détail

Cartes, géocodage et services de géolocalisation

Cartes, géocodage et services de géolocalisation 8 Cartes, géocodage et services de géolocalisation Au sommaire de ce chapitre : Géocodage avant et inverse Créer des cartes interactives avec les Map Views et les Map Activities Créer et ajouter des Overlays

Plus en détail

Information utiles. cinzia.digiusto@gmail.com. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/

Information utiles. cinzia.digiusto@gmail.com. webpage : Google+ : http://www.ibisc.univ-evry.fr/ digiusto/ Systèmes de gestion de bases de données Introduction Université d Evry Val d Essonne, IBISC utiles email : cinzia.digiusto@gmail.com webpage : http://www.ibisc.univ-evry.fr/ digiusto/ Google+ : https://plus.google.com/u/0/b/103572780965897723237/

Plus en détail

Cours Web n o 7 MySQL et PHP

Cours Web n o 7 MySQL et PHP Introduction aux bases de données Cours Web n o 7 MySQL et PHP Sandrine-Dominique Gouraud (gouraud@lri.fr) Pierre Senellart (pierre@senellart.com) Semaine du 7 novembre 2005 S.-D. Gouraud, P. Senellart

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Module FMIN358 Technologies du Web : PHP objet et couches d accès aux bases de données

Module FMIN358 Technologies du Web : PHP objet et couches d accès aux bases de données Module FMIN358 Technologies du Web : PHP objet et couches d accès aux bases de données 1. Exploiter une couche métier objet PHP prend en charge certains des grands principes du paradigme objet (héritage,

Plus en détail

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Cours Base de données relationnelles. M. Boughanem, IUP STRI Cours Base de données relationnelles 1 Plan 1. Notions de base 2. Modèle relationnel 3. SQL 2 Notions de base (1) Définition intuitive : une base de données est un ensemble d informations, (fichiers),

Plus en détail

La présente publication est protégée par les droits d auteur. Tous droits réservés.

La présente publication est protégée par les droits d auteur. Tous droits réservés. Editeur (Medieninhaber/Verleger) : Markus Winand Maderspergerstasse 1-3/9/11 1160 Wien AUSTRIA Copyright 2013 Markus Winand La présente publication est protégée par les droits d auteur.

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

TP4 : Stockage de données

TP4 : Stockage de données TP4 : Stockage de données 1 TP4 : Stockage de données Programmation Mobile Objectifs du TP Ce TP a pour objectif de vous initier au stockage des données dans le téléphone Android, dans la mémoire interne

Plus en détail

La base de données XML exist. A. Belaïd

La base de données XML exist. A. Belaïd La base de données XML exist Introduction Qu est-ce-que exist? C est une base de donnée native, entièrement écrite en Java XML n est pas une base de données en soi Bien qu il possède quelques caractéristiques

Plus en détail

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

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste Christian Soutou Avec la participation d Olivier Teste SQL pour Oracle 4 e édition Groupe eyrolles, 2004, 2005, 2008, 2010, is BN : 978-2-212-12794-2 Partie III SQL avancé La table suivante organisée en

Plus en détail

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

Notes de cours : bases de données distribuées et repliquées Notes de cours : bases de données distribuées et repliquées Loïc Paulevé, Nassim Hadj-Rabia (2009), Pierre Levasseur (2008) Licence professionnelle SIL de Nantes, 2009, version 1 Ces notes ont été élaborées

Plus en détail