Bases de Données Réparties - LP GSR 2007/2008

Transcription

Bases de Données Réparties - LP GSR 2007/2008
Bases de Données :
ARCHITECTURES CLIENT – SERVEUR
Bases de Données Réparties
Couches de connectivités ODBC
Architectures 2 Tiers et 3 Tiers
n
n
n
Licence GSR
Franck Le Douarin
J.Siroux
LP/cours/cours1_ue62
1
Sommaire
BDD - ARCHITECTURES CLIENT – SERVEUR
n
1. Les différentes architectures
è
è
è
è
n
2. Les Bases de données Réparties
è
è
è
è
n
A quoi cela sert-il ?
L’état de l’art des éditeurs
Niveau Physique
Niveau logique d’implémentation
3. Mise en application d’ODBC sur un client Windows
è
è
è
è
n
1.1. Architecture 2-Tiers
1.2. Architecture 3-Tiers
1.3. ODBC et JDBC
1.4. Bases de données réparties
Séquence Pas à Pas
Renseignement des données
Test d’application
Tuning et optimisation
4. Différences majeures entre JDBC et ODBC
J.Siroux
LP/cours/cours1_ue62
2
1. Les différentes architectures
è
è
è
Architecture 2-Tiers
Architecture 3-Tiers
Couche de connectivité ODBC et JDBC
l ODBC = Open DataBase Connectivity (MS, IBM, Borland, Novell):
Librairie de fonctions appelées à partir d'applications sous
Windows. Accès à tout SGBD Relationnel (ou tableur, ou fichiers) à
condition de disposer d'un pilote (ODBC Driver). En général les
éditeurs de SGBD fournissent le pilote ce qui permet une ouverture
vers de nombreuses applications.
l
è
JDBC pour Java, Web & BD : interface avec le SGBD
Bases de données réparties
l Une base de données répartie est un assemblage de différentes
bases de données mises en relations les unes avec les autres à
travers un réseau d'ordinateurs.
J.Siroux
LP/cours/cours1_ue62
3
2. Bases de données réparties
è
Plusieurs actions de recherches et de développement depuis
le milieu des années 70
è
Prototypes et produits commerciaux années 80
è
Différents aspects :
- BD Relationnelles et BD Orientées Objets,
- Architectures de Systèmes et de Machines
- SGBD sur tout type de machine (serveur au Palm !)
- Réseaux Locaux et Généraux (LAN, WAN),
- Clients/Serveurs et Architectures n -tiers
- BD mobiles
- Parallélisme des données et des traitements
J.Siroux
LP/cours/cours1_ue62
4
2. Bases de données réparties
Client / Serveur BD
n Client : Terminal ou Station de Travail
n
Station de Travail: capacité de traitement et de stockage
n
Protocole CLIENT - SERVEUR
CLIENT : gestionnaire d'interface BD
CLIENT & SERVEUR : gestionnaire des communications
n
n
Protocoles de communication Client/Serveur : exemple RPC
Choix de transfert données ou requêtes (function shipping vs
data shipping) ==> différentes architectures
J.Siroux
LP/cours/cours1_ue62
5
2. Bases de données réparties
Architectures distribuées & Serveurs de BD
n RPC = Remote Procedure Call (OSI), demande d'exécution
(a)synchrone et distante de procédure
n RDA = Remote Data Access (SQL Access Group OSI92)
requête et
exécution asynchrone, spécialisée SQL2
n Accès à différents SGBD (CLI: Call Level Interface)
n ODBC et JDBC
n SGBD Orientés Objets et Serveurs d'Objets (ou de pages)
(exemple, O2)
n Notion de "middleware"
J.Siroux
LP/cours/cours1_ue62
6
2. Bases de données réparties
Systèmes relationnels et serveurs SQL
n SGBD RELATIONNELS :Informix, Oracle, SQL Server, Sybase, DB2...
n Serveurs parallèles : DBC / 1012 (Data Base Computer, Teradata)
- Basé sur SQL
- Architecture par passage de messages (de 2 à 1024 noeuds - Intel
n
80386)
- Réseau organisé en arbre de processeurs (Y net)
- Supporte différents hôtes (MVS, VM/CMS, UNIX, etc.)
NONSTOP -SQL (Tandem)
- SQL et UNIX
- Architecture par passage de messages (de 2 à 32 noeuds de
processeurs spécialisés)
- "Fault tolerant architecture" : tout est en double
J.Siroux
LP/cours/cours1_ue62
7
2. Bases de données réparties
• Interface usager & code
de l’application
• Code du SGBD
• Système d’exploitation
• Une seule ou plusieurs
machines
• Différents composants
reliés par un moyen de
communication (bus,
canal, réseau)
J.Siroux
LP/cours/cours1_ue62
8
2. Bases de données réparties
Composants distribués
è
è
è
è
è
è
è
Problème de construction d’applications
Réutilisation de composants
Objets, Composants
Composants distribués (médiateurs)
Rôles des langages à objets (C++, Java)
Outils divers et Web
Serveur d’Application
Caractéristiques générales
è
è
è
è
Architecture distribuée, client/serveur, parallèle
WEB et architectures 3-tier (3 strates)
Langages SQL, LP+ (C, C++, Java, etc.)
Support de nouveaux types de données dont le
multimédia (datablades, extenders, cartridges)
è
è
è
Extensibilité et modularité
Méthodes d’accès spécifiques (eg. spatial)
Data warehouse & Data mining
J.Siroux
LP/cours/cours1_ue62
9
2. Bases de données réparties
Serveurs d’applications
n
Equivalents modernes des Moniteurs Transactionnels (TP Monitors)
Tous, sauf Microsoft sont basés sur Java 2 Enterprise Edition (J2EE)
Produits: BEA WebLogic , IBM WebSphere, Oracle9i Application Server,
Sun ONE (iPlanet), Sybase EAServer , HP, Iona, Hitachi, NEC, Computer
Associates, ..., Microsoft .NET
Open Source: JBoss, JOnAS
J2EE is to Java what SQL was to databases"
WithoutJ2EE, it is not an application server«
n
Différences sur :
Facilité d’utilisation, passage à l’échelle, disponibilité, fiabilité, intégration des
données existantes (legacy data), produits complémentaires (ex, personalisation,
commerce, workflow)
J.Siroux
LP/cours/cours1_ue62
10
2. Bases de données réparties
BDR = BD + RESEAU
n Nombreuses applications permettant de concilier centralisation
des données pour accès locaux et mise en place des applications
faisant intervenir des données décentralisées.
Cas de grosses entreprises ou organismes ayant des agences
géographiquement distribuées:
n
- Banques, transferts électroniques
- Fabrication (plusieurs usines)
- Médicales (ex :. Banques d'organes)
- Militaires...
- Systèmes de réservation de compagnies aériennes
- Chaînes d'hôtels
- Systèmes d'information dans une organisation décentralisée
J.Siroux
LP/cours/cours1_ue62
11
2. Bases de données réparties
Avantages:
n
n
n
données locales traitées localement
fiabilité plus grande (plusieurs machines indépendantes)
construction progressive, disponibilité accrue si duplication sur
plusieurs sites.
Deux mots clés : PARTIONNEMENT & DUPLICATION
Ils s'appliquent à différents niveaux :
n données
n schémas ou catalogues ou dictionnaires de la BD
n SGBD (composants logiciels, le code du système)
n machine (composants matériels: les processeurs, les
mémoires et les disques)
J.Siroux
LP/cours/cours1_ue62
12
2. Bases de données réparties
n
n
Plusieurs approches des BDR, selon :
1/ les caractéristiques du réseau (général, local),
2/ la coopération de données existantes,
3/ la répartition contrôlée des données,
4/ l'homogénéité ou l'hétérogénéité des systèmes locaux.
5/ l'évolution de l'architecture des machines (parallélisme)
6/ l'évolution de l'architecture des systèmes (client / serveur)
QUESTION : cacher ou non la répartition aux utilisateurs ?
Différentes réponses selon les approches, les applications, les
environnements, etc.
- "location transparency"
- "partition transparency"
- "duplication transparency"
J.Siroux
LP/cours/cours1_ue62
13
2. Bases de données réparties
n
Approche descendante: (Distributed DB, schéma de
gauche) découper une BD en plusieurs Bases Locales
n
Approche ascendante: (Multidatabase, schéma de droite)
faire coopérer des BD existantes
J.Siroux
LP/cours/cours1_ue62
14
2. Bases de données réparties
J.Siroux
LP/cours/cours1_ue62
15
2. Bases de données réparties
J.Siroux
LP/cours/cours1_ue62
16
2. Bases de données réparties
Photographies ou Snap-Shots
n
n
n
n
En général, les photos locales ne sont accessibles qu'en lectu re.
La seule opération qui modifie la photo est le rafraichissement.
Méthode brutale = ré-executer la requête qui définit la photo
Appliquer les Deltas :P = Q(R1, R2, …Rn)
Supposons que seule R1 change en R1U t (insertion de t).
La nouvelle valeur P' de P est Q(R1 U t, R2,…Rn).
Selon les opérateurs de Q on peut écrire :
Q(R1 U t, R2,…Rn) = Q(R1, R2…Rn)U Q(t)
Ce qui revient à n'évaluer Q que sur le delta
J.Siroux
LP/cours/cours1_ue62
17
2. Bases de données réparties
Site de naissance (ne change pas),Site de stockage (peut changer)
n Site de l'usager : Michel de S1 crée une relation R et la stocke sur
S2 (langage PL/SQL sous Oracle)
CREATE TABLE WAGON(NW, TYPE, POIDS, GARE, ETAT) ON S2
S1 = site de naissance (WAGON@S1)
S2 = site de stockage
Michel de S1 déplace la relation de S2 vers S3
MIGRATE TABLE WAGON@ S1 TO S3
Rôle des catalogues: ici WAGON est connu de S1, S2 et S3
Vues pour données partitionnées
n Duplication
DUPLICATE TABLE WAGON@ S1 ON S4, S5
n Photo
CREATE SNAPSHOT MESWAGON AS SELECT * FROM WAGON
WHERE GARE="Grenoble« REFRESH EVERY WEEK
n
J.Siroux
LP/cours/cours1_ue62
18
2. Bases de données réparties
Optimisation des lectures sur une BDR
n
Indépendance des données : même requête si l’organisation
physique est différente.
Pas d'ordre dans les opérations de PRODUIT
n
n
n
OPTIMISER?
Optimizer = composant essentiel des SBD centralisés ou
répartis
– Modèle basé sur les coûts d'accès (Cost based )
– Modèle basé sur des règles d'optimisation ( Rule Based )
(ex. Oracle V8/9, choix des modes)
Grands principes :
– Appliquer les OPTIMISATIONS ALGEBRIQUES et
– Tenir compte des CHEMINS D'ACCES qui existent sur chaque
relation de la requête.
J.Siroux
LP/cours/cours1_ue62
19
2. Bases de données réparties
Optimisation : fonction de coût
n - TRANSFERTS DISQUE ===> MEMOIRE
n - TRAITEMENTS EN U.C. + en répartie COMMUNICATION entres
sites
CTA = ? * NBPAGES + ??? NBNUPLETS (+ ????NBMESSAGES)
n POIDS des COUTS:
n ? = poids des E/S PAGES (exemple 1)
n ? = poids du traitement en UC (exemple 1/3)
n ? = poids des messages
PROBLEME: EVALUER NBPAGES, NBNUPLETS, NBMESSAGES
avant d'accéder aux données de la bd
n SOLUTION: faire des estimations basées sur des informations (+ ou fraîches) conservées dans les catalogues du SGBD
n Rôle de l'administrateur
n SQL compilé ou interprété ?
J.Siroux
LP/cours/cours1_ue62
20
2. Bases de données Réparties
Interrogation d’une Base de Données Réparties
n Plusieurs phases à partir de la soumission de la requête au site
global (SG) :
è
(1) Remplacer les relations globales par leurs expressions. Cela
revient à remplacer chaque relation globale par son expression ne
faisant intervenir que des fragments locaux.
è
è
è
è
è
è
è
(2) Localisation des opérandes
(3) Décomposition de la requête globale en sous -requêtes locales
et envoi aux sites concernés
(4) Exécution répartie: parallélisme, synchronisation, transfert
RG =< RL1; RL2; (RL3 || RL4); RL5>
Le parallélisme intra-requête (globale, RL3, RL4) ou inter-requêtes
(le SGBDR exécute plusieurs requêtes pour x usagers)
(6) Mise en forme des résultats
(7) Retour des résultats au site global.
J.Siroux
LP/cours/cours1_ue62
21
2. Bases de données Réparties
n
n
n
n
n
n
n
n
Etude de cas
• M(MAG, VILM, DIR)
• P(NP,PA,PV,DESC)
• L(NP,NF,MAG,QL)
• F(NF,VILF)
M = ensemble de magasins,
P = produits prix d'achat (PA), et prix de vente (PV)
L = livraisons effectuées
F = fournisseurs
On suppose, pour simplifier que S et L caractérisent le mois en cours et
qu'ainsi la quantité en stock est remise à zéro au début de chaque mois.
Répartition : sites | relations
-------|-------------
S1 | M, P
S2 | L, F
J.Siroux
LP/cours/cours1_ue62
22
2. Bases de données réparties
n
n
n
n
Exemple de RG
SELECT NF,MAG FROM P, F, L
WHERE F.VILF= "grenoble"
AND F.NF=L.NF AND P.PA > 50
AND P.NP=L.NP
a) cardinalités des relations:
F : 10 000 ; P: 100 000 L: 1 000 000
b) il y a 10 fournisseurs à Grenoble et 1000 produits
ayant PA > 50
c) les n-uplets ont tous la même taille de 100 octets
d) caractéristiques du réseau:
- 1 seconde pour le temps d'accès
è - 100 000 octets/seconde pour le débit du transfert,
coût total de communication CC entre deux sites
è
n
CC = nombre de messages * temps d'accès + nombre de bits transmis/débit
J.Siroux
LP/cours/cours1_ue62
23
2. Bases de données réparties
n
Solution 1 :
-Transfert ( P, S2)
- Executer RG surS2
CC1 = 1 + (105*100) /10 5 = 101 secondes (1,5min)
n
Solution 2 :
-Transfert ( F, S1)
-Transfert ( L, S1)
- Executer RG sur S1
- CC2 = 2 +( (10 4 + 106)*100)) /10 5 = 1012 secondes (17 min)
J.Siroux
LP/cours/cours1_ue62
24
2. Bases de données réparties
n
n
Solution 3 :
S1: TS1 := SELECT * FROM P WHERE PA > 50 ;
- Transfert (TS1, S2)
- SurS2: SELECT NF,MAG FROM F, L, TS1
WHERE F.VILF="Grenoble" AND F.NF=L.NF AND
L.NP =TS1.NP
- CC3 = 1 + (103*100) /10 5 = 2 secondes
Solution 4 :
S2: TS2 := SELECT * FROM F, L WHERE F.VILF="Grenoble«
AND F.NF=L.NF ;
- Transfert (TS2, S1)
- SurS1: SELECT NF,MAG FROM P, TS2 WHERE P.PA > 50
AND P.NP =TS2.NP
- CC4 = 1 + (107*100) /10 5 = 10001 secondes (2,5h)
J.Siroux
LP/cours/cours1_ue62
25
2. Bases de données réparties
BD Parallèles
n
Les Opérateurs relationnels se prêtent bien à la parallélisation :
opérateurs uniformes sur des flots uniformes de données
n
Fermés sur la composition : R := f(R1, R2, …Rn)
Chaque opérateur consomme 1 ou 2 flots d'entrée
Chaque flot est une collection uniforme de données
Données séquentielles en entrée et en sortie : "pure dataflow “
Déjà des SGBD et des architectures adéquat (plus abouti :
Oracle // Server, coût 60 K€) mais encore du travail
n
n
n
n
n
Parallélismes inter ou intra requêtes ?
J.Siroux
LP/cours/cours1_ue62
26
2. Bases de données réparties
Exemple : Requête parallèle
SELECT IMAGE
FROM LANDSAT
WHERE DATE BETWEEN 1970 AND 1990 {temporal}
AND OVERLAPS(LOCATION, :Rockies) {spatial}
AND SNOW_COVER(IMAGE) > .7 {image}
n Affecter un processus à chaque processeur/disque et rechercher les
images sur leurs attributs et sur leur contenu en séquence ou en
parallèle
n
Problèmes de performance: Jeux de Test (Benchmarks)
- TPC-A, TPC-B, TPC-C, TPC-D, …( Transaction Processing
Performance Council). Se reporter à http://www.tpc.org
J.Siroux
LP/cours/cours1_ue62
27
2. Bases de données réparties
Balayage des données en // ?
n Disques : 3MO/s à 10MO/s
n Tuple (record) de 100 à 200 Octets (donc théoriquement traitement de
10kr/s à 100kr/s)
n Requête de type : Select count(*) from T where x < valeur
n T a 1M de tuples stockés sur un disque classique
n pas d'anticipation par le système d'exploitation ou le SGBD (readahead)
n blocs d'E/S petits (2kO)
n les données ne sont pas regroupées sur le disque
n Le parallélisme n'est pas toujours la solution à ce type de problème
n Balayage parallèle:
n 4 disques, 4 controleurs , 4 processeurs, 4 fois plus de tuples mais
partitionnés, processeurs, même requête:même temps?
J.Siroux
LP/cours/cours1_ue62
28
2. Bases de données réparties
n
n
SGBD //
• "Shared nothing"
- Teradata (400 noeuds)
- Tandem (110noeuds )
- IBM/SP2/DB2 (128 noeuds)
- Informix/SP2 (48 noeuds)
- ATT & Sybase (8*14 noeuds)
• Disques partag és
- Oracle (170noeuds )
- RdB(24 noeuds)
• Mémoire partag ée
- Informix (9 noeuds)
- Redbrick (?noeuds)
DBC/1012 TERADATA
n Machine BD pour traiter de gros
volumes (>1984)
n MIMD mémoires privées
n Intel 80386, 80486
n Plus grosse installation : 476 noeuds ,
2,4 TB
n Architecture extensible
n Regroupement de processeurs (shared
nothing)
-IFP Interface Processor, COP
Communication Processor, AMP Access
Module Processor, Bus (doublé) Ynet
(arbre binaire)
-Données partitionnées par Hash -code,
fragment, Bonnes performances (balayage
de 1TB en 12’)
J.Siroux
LP/cours/cours1_ue62
29
2. Bases de données réparties
Mise à jour BDR (1)
n PB : insertion, suppression des données réparties dépendent des cas
n de répartition ( modification = suppression ; insertion)
n Relation locale: la mise à jour est faite localement (voir transactions)
n Duplication la mise à jour doit être faite partout où il y a une copie.
n Ceci n'est viable que si la relation n'a pas un fort taux de mis e à jour.
n Plusieurs stratégies :
- Copie Primaire / copies secondaires : la mise à jour est faite sur la copie
primaire et transmise aux secondaires. Certaines lectures peuvent être
impropres et cela pose le problème de la panne du site primaire
- Double primaire : La mise à jour ne sera validée que si elle a été faite sur les
deux copies primaires.
- Vote majoritaire: La mise à jour est acceptée ssi il n'y a pas de conflit de
mise à jour et si la mise à jour est acceptée par une majorité de sites.
J.Siroux
LP/cours/cours1_ue62
30
2. Bases de données réparties
Mise à jour BDR (2)
n
n
n
Partition Horizontale: RG := UNION(RL1, RL2…RLn)
Insérer(RG, t) ==> un seul insérer(RLj , t) sur site j
Problèmes:
(1) déterminer le fragment concerné :
- se servir du critère de partionnement
- lancer en // l'insertion partout et défaire si plus d'un site a
inséré.
(2) vérifier l'unicité des clés. Il faut interroger tous les si tes ayant un
fragment pour vérifier si la clé proposée n'existe pas déja.
J.Siroux
LP/cours/cours1_ue62
31
2. Bases de données réparties
Mise à jour BDR - Transactions distribuées
n
n
Chaque transaction globale TG peut correspondre à une ou plusieurs
transactions locales TLi
ACID en BDR?
Atomicité : la TG doit être entièrement exécutée ou non (càd
TOUTES les Tli)
è Cohérence : la TG doit respecter les contraintes GLOBALES sur
la BDR
è Isolation : tout doit se passer comme si la TG était seule à utiliser
la BDR
è • Durabilité : Si TG valide, alors TOUT ce qu’elle a fait sur TOUS
è les sites doit survivre quoi qu’il arrive.
J.Siroux
LP/cours/cours1_ue62
32
3. Couches de connectivité - ODBC
n
n
n
Le gestionnaire ODBC est présent sur les systèmes Windows 9x, 2000.
Sous Windows 95 et 98 le gestionnaire ODBC est disponible dans le panneau
de configuration sous l'icône suivant:
Inconvénients de la technologie ODBC
Bien que ODBC permette un interfaçage avec des bases de données
indépendamment du SGBD, cette technologie reste une solution propriétaire de
Microsoft. Cela se traduit par une dépendance de la plateforme (fonctionne
uniquement sous Windows).
D'autre part, ODBC est fortement lié au langage C (utilisation de pointeurs), et
ODBC utilise des paramètres non standards, ce qui le rend parfois incompatible
avec certaines fonctions évoluées d’une base de données.
J.Siroux
LP/cours/cours1_ue62
33
3. Couches de connectivité - ODBC
n
Drivers par défaut
J.Siroux
LP/cours/cours1_ue62
34
3. Couches de connectivité - ODBC
Déclaration d’un DSN
ODBC permet de relier un client à une base de données en déclarant
une source de données (correspondant généralement à une base de
données) dans le gestionnaire ODBC (communément appelé
administrateur de source de données ODBC).
Rappel : La source de données peut être aussi bien une base de
données qu'un fichier Access, Excel ou bien même un fichier.
On appelle donc DSN (Data Source Name) la déclaration de la source
de données qui sera accessible par l'intermédiaire de ODBC.
Déclaration de la source de données
L'administrateur de source de données ODBC (parfois appelé ODBC32
bits), disponible dans le panneau de configuration, permet de déclarer
le type de données auxquelles il est possible d'accèder et de leur
associer un nom. L'onglet DSN système permet de voir la liste de DSN
déjà installés sur le système :
J.Siroux
LP/cours/cours1_ue62
35
3. Couches de connectivité - ODBC
J.Siroux
LP/cours/cours1_ue62
36
3. Couches de connectivité - ODBC
Pour déclarer une source de données il faut :
n
Créer les données (créer une ou plusieurs tables dans une base de
données ou bien créer un fichier Excel ou Access)
n
Installer le driver ODBC pour la base de données si celle-ci n'est pas
installée par défaut sous l'administrateur de source de données
n
Etablir la liaison ODBC dans l'onglet DSN système de l'administrateur
de source de données, en cliquant sur Ajouter... puis en sélectionnant
le type de driver à utiliser.
J.Siroux
LP/cours/cours1_ue62
37
3. Couches de connectivité - ODBC
J.Siroux
LP/cours/cours1_ue62
38
3. Couches de connectivité - ODBC
n
L'administrateur de source de données va ensuite demander le nom à
affecter à la source de données (Il s'agit du nom par lequel la base de
données sera accessible), puis de sélectionner la source de données.
J.Siroux
LP/cours/cours1_ue62
39
3. Couches de connectivité - ODBC
n
Il faut ensuite donner le chemin d'accès à la base de données
physique (Path File) en cliquant sur le bouton sélectionner de la
fenêtre précédente
n
La base de données devrait alors être accessible via ODBC
n
Suivant les bases de données, la procédure peut varier et des
options supplémentaires peuvent-être demandées, mais la
configuration d'un DSN système reste globalement la même.
J.Siroux
LP/cours/cours1_ue62
40
3. Couches de connectivité - JDBC
n
La technologie JDBC (Java DataBase Connectivity) est une API
fournie avec Java (depuis sa version 1.1) permettant de se
connecter à des bases de données, c'est-à-dire que JDBC
constitue un ensemble de classes permettant de développer
des applications capables de se connecter à des serveurs de
bases de données (SGBD).
n
L'API JDBC a été développée de telle façon à permettre un
programme de se connecter à n'importe quelle base de
données en utilisant la même syntaxe, c'est-à-dire que l'API
JDBC est indépendante du SGBD.
n
De plus, JDBC bénéficie des avantages de Java, dont la
portabilité du code, de qui lui vaut en plus d'être
indépendant de la base de données d'être indépendant
de la plate-forme sur laquelle elle s'exécute.
J.Siroux
LP/cours/cours1_ue62
41
3. Couches de connectivité – JDBC
n
Dans un système client/serveur, l'accès aux bases de données avec
JDBC peut s'effectuer selon un modèle à deux couches ou bien un
modèle à trois couches.
n
Pour le modèle à deux couches, une application Java est intimement
liée avec une base de données. A cet effet, il faut bien évidemment
disposer, pour la base de données concernée, d'un pilote JDBC
adéquat. Les instructions SQL sont directement envoyées à la base,
cette dernière renvoyant les résultats par un biais tout aussi direct. La
base de données peut être exécutée sur la machine locale (celle sur
laquelle l'application Java fonctionne) ou bien sur tout autre ordinateur
du réseau (Intranet ou Internet).
J.Siroux
LP/cours/cours1_ue62
42
3. Couches de connectivité - JDBC
n
Dans le modèle à 3 couches, une troisième couche (le serveur
d'application) vient s'intercaler entre l'application Java et la base de
données. Les instructions SQL et les résultats livrés en retour y
transitent. Ce modèle présente l'avantage d'intégrer dans cette couche
un contrôle d'accès.
J.Siroux
LP/cours/cours1_ue62
43
3. Couches de connectivité - JDBC
Les types de pilotes JDBC
n Les pilotes JDBC actuels sont classés en quatre catégories :
n Pilotes de type 1: Pilotes accédant à une base de données par l'intermédiaire
d'une autre technologie (on parle de passerelle). Les passerelles JDBC-ODBC,
permettant une connexion via un pilote ODBC en sont l'exemple le plus courant.
Le pilote convertit les appels de données Java en appel ODBC valide, et les
exécute ensuite à l'aide du pilote ODBC
n Pilotes de type 2: Pilotes d'API natifs. Il s'ait d'un mélange de pilotes natifs et
de pilotes Java. Les appels JDBC sont convertis en appels natifs pour le serveur
de bases de données (Oracle, Sybase, ou autres) généralement en C ou en
C++.
n Pilotes de type 3: Pilotes convertissant les appels JDBC en un protocole
indépendant du SGBD. Un serveur convertit ensuite ceux-ci dans le protocole
SGBD requis (modèle à 3 couches)
n Pilotes de type 4: Pilotes convertissant les appels JDBC directement en un
protocole réseau exploité par le SGBD. Ces pilotes encapsulent directement
l'interface cliente du SGBD et sont fournis par les éditeurs de base de données.
Cette solution est à préconiser dans le cadre d'un intranet.
J.Siroux
LP/cours/cours1_ue62
44
3. Couches de connectivité - JDBC
Connection à la base de données
n L'API (Application Programming Interface) JDBC, c'est-à-dire la
bibliothèque de classes JDBC, se charge de trois étapes indispenables
à la connexion à une base de données:
- la création d'une connexion à la base
- l'envoi d'instructions SQL
- l'exploitation des résultats provenant de la base
Le package java.sql.
n
Tous les objets et les méthodes relatifs aux bases de données sont
présentes dans le package java.sql, il est donc indispensable
d'importer java.sql dans tout programme se servant de la technologie
JDBC.
J.Siroux
LP/cours/cours1_ue62
45
3. Couches de connectivité - JDBC
Connection à la base de données
n Pour se connecter à une base de données il est essentiel de charger dans un
premier temps le pilote de la base de données à laquelle on désire se connecter
grâce à un appel au DriverManager (gestionnaire de pilotes) :
Class.forname("nom.de.la.classe");
Cette instruction charge le pilote et crée une instance de cette classe. Exemple :
Pour se connecter à une base de données déclarée dans l'administrateur ODBC, il
faut charger le pilote JDBC-ODBC (appelé pont JDBC-ODBC) :
Class.forname("sun.jdbc.odbc.JdbcOdbcDriver");
n Certains compilateurs refusant cette notation, il faut parfois appeler le driver de la
façon suivante :
Class.forname("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
n Pour se connecter à une base de données particulière, il s'agit ensuite de créer une
instance de la classe Connection grâce à la méthode getConnection de l'objet
DriverManager en indiquant la base de données à charger à l'aide de son URL
String url = "jdbc:odbc:base_de_donnees"; Connection con =
DriverManager.getConnection(url);
n Le nom de la base de données (ici base_de_donnees) étant celle
du DSN déclaré dans le panneau de configuration ODBC, c'est-àdire le nom du DSN.
J.Siroux
LP/cours/cours1_ue62
46
3. Couches de connectivité - JDBC
Exécution d'une requête SQL
n Pour exécuter une requête SQL, il s'agit dans un premier temps de
créer un objet Statement, pouvant être obtenu à partir de l'objet
Connection. Un objet ResultSet permettra de récupérer les données
en provenance de l'objet Statement.
String query = "SELECT * FROM Ma_Table;"; ResultSet results;
try {
Statement stmt = con.createStatement();
results = stmt.executeQuery(query);
}
catch(Exception(e){
System.out.println("exception du a la requete");
}
J.Siroux
LP/cours/cours1_ue62
47
3. Couches de connectivité - JDBC
Accès aux données
n Une fois la connection à la base de données établie, il est possible de
demander des informations sur le nom des tables et le contenu de chaque
colonne, ainsi que d'exécuter des requêtes SQL afin de récupérer des
informations, d'en ajouter ou bien de les modifier.
n Les objets utilisables pour obtenir des informations sur la base sont:
DataBaseMetaData: Un objet contenant les informations sur la base de
données en général (des métadonnées), c'est-à-dire le nom de la table, les
index, la version de la base, ...
n ResultSet: Un objet contenant les informations sur une table ou le résultat d'une
requête. L'accès aux données se fait colonne par colonne, mais il est
éventuellement possible d'accèder indépendamment à chaque colonne par son
nom
n ResultSetMetaData: Un objet contenant des informations sur le nom et le type
des colonnes d'une table
J.Siroux
LP/cours/cours1_ue62
48
3. Couches de connectivité - JDBC
n
L'objet ResultSet est l'objet le plus important de la technologie
JDBC, car il s'agit d'une abstraction de la table ou de la réponse à une
requête (généralement un sous-ensemble d'une table). Ainsi, presque
toutes les méthodes et requêtes retournent les données sous forme
d'un objet ResultSet. Cet objet contient un nombre donné de colonnes
repérées chacune par un nom, ainsi qu'une ou plusieurs lignes
contenant les données, et auxquelles il est possible d'accèder
séquentiellement une à une du haut vers le bas. Ainsi, afin d'exploiter
un objet ResultSet, il est nécessaire de récupérer le nombre de
colonnes de celui-ci, à l'aide de l'objet ResultSetMetaData.
ResultSetMetaData rsmd;
rsmd = results.getMetaData();
numcols = rsmd.getColumnCount();
Lors de l'obtention d'un objet ResultSet, le descripteur pointe avant la
première ligne
J.Siroux
LP/cours/cours1_ue62
49
3. Couches de connectivité - JDBC
Les principales méthodes de l'objet ResultSet sont les suivantes:
n getInt(int): récupère sous forme d'entier le contenu d'une colonne désignée par
son numéro
n getInt(String): récupère sous forme d'entier le contenu d'une colonne désignée
par son nom
n getFloat(int): récupère sous forme de flottant le contenu d'une colonne désignée
par son numéro
n next(): déplace le pointeur de colonne sur la colonne suivante
n close(): ferme l'objet ResulSet
n getMetaData(): retourne les métadonnées de l'objet (l'objet ResultSetMetaData)
L'objet ResultSetMetaData (obtenu de l'objet ResultSet) permet de connaître le
nombre, le nom et le type de chaque colonne à l'aide des méthodes suivantes:
n getColumnCount(): récupère le nombre de colonnes
n getColumnName(int): récupère le nom de la colonne spécifiée
n getColumnLabel(int): récupère le label de la colonne spécifiée
n getColumnType(int): récupère le type de données de la colonne spécifiée
J.Siroux
LP/cours/cours1_ue62
50
3. Couches de connectivité - JDBC
Création d'objets JDBC de plus haut niveau
n Puisque l'accès à une base de données nécessite l'utilisation conjointe
de plusieurs objets, il peut être intéressant de créer quelques objets de
plus haut niveau encapsulant la plupart des comportements cités cidessus.
n
Ainsi la création d'un objet DataBase pour permettre d'encapsuler
l'ensemble des objets nécessaires à la connection à une base de
données (Connection, Statement, DataBaseMetaData), ainsi que de
(re)définir des méthodes simples permettant de rendre plus simples
certaines opérations, comme la création de la connection, la
récupération du nom des tables, ainsi qu'une méthode Execute rendant
l'exécution de requête triviale.
J.Siroux
LP/cours/cours1_ue62
51
3. Couches de connectivité - JDBC
class Database
{
Connection con;
resultSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dm;
String catalog;
String types[];
//---------------------------public Database(String Driver)
{
types = new String[1];
types[0] = "TABLES";
try {
Class.forName(driver);
}
catch(Exception e){
System.out.println("Erreur lors du chargement du driver:"+
e.getMessage());
}
}
J.Siroux
LP/cours/cours1_ue62
52