Académique Documents
Professionnel Documents
Culture Documents
Patrick Itey
INRIA - Sophia Antipolis Patrick.Itey@sophia.inria.fr http://www-sop.inria.fr/acacia/personnel/itey
Java est un excellent candidat pour le dveloppement dapplications de bases de donnes : n robuste et scuris n facile comprendre n automatiquement tlchargeable par le rseau mais avant JDBC, il tait difficile daccder des bases de donnes SQL depuis Java : n oblig dutiliser des API natives comme ODBC
P. Itey - INRIA
Java et JDBC - page 2
08/01/2001
2EMHFWLIV GH -'%&
Permettre aux programmeurs Java dcrire un code indpendant de la base de donnes et du moyen de connectivit utilis Ralis par lAPI JDBC :
n n n n
une interface uniforme permettant un accs homogne aux SGBD simple mettre en uvre indpendant de la SGBD cible supportant les fonctionnalits de base du langage SQL
P. Itey - INRIA
Java et JDBC - page 3
08/01/2001
Java DataBase Connectivity (Core API 1.1) API Java adapte la connexion avec les bases de donnes relationnelles (SGBDR) Fournit un ensemble de classes et dinterfaces permettant lutilisation sur le rseau dun ou plusieurs SGBDR partir dun programme Java.
08/01/2001
P. Itey - INRIA
$YDQWDJHV
08/01/2001
P. Itey - INRIA
/$3, -'%&
Est fournie par le package java.sql n permet de formuler et grer les requtes aux bases de
donnes relationnelles
08/01/2001
P. Itey - INRIA
MDYDVTO
8 interfaces :
n n n n n n
Statement CallableStatement, PreparedStatement DatabaseMetaData, ResultSetMetaData ResultSet, Connection Driver
08/01/2001
P. Itey - INRIA
3ULQFLSH GH IRQFWLRQQHPHQW
Chaque base de donnes utilise un pilote (driver) qui lui est propre et qui permet de convertir les requtes JDBC dans le langage natif du SGBDR. Ces drivers dits JDBC (un ensemble de classes et dinterfaces Java) existent pour tous les principaux constructeurs : n Oracle, Sybase, Informix, DB2, ...
P. Itey - INRIA
08/01/2001
$UFKLWHFWXUH -'%&
Ehh6yv6yr
JDBC API
E9789vrHhhtr
E978Ir qvr
Phpyr
Tihr
Phpyr
Tihr
08/01/2001
P. Itey - INRIA
8Q PRGqOH j FRXFKHV
La couche externe : API JDBC n cest la couche visible et utile pour dvelopper des
applications Java accdant des SGBDR
08/01/2001
P. Itey - INRIA
'ULYHUV -'%&
4 types de drivers (taxonomie de JavaSoft) : n Type I : JDBC-ODBC bridge driver n Type II : Native-API, partly-Java driver n Type III : Net-protocol, all-Java driver n Type IV : Native-protocol, all-Java driver Tous les drivers : n http://www.javasoft.com/products/jdbc/drivers.html
P. Itey - INRIA
Java et JDBC - page 11
08/01/2001
'ULYHU GH W\SH ,
Le driver accde un SGBDR en passant par les drivers ODBC (standard Microsoft) via un pont JDBC-ODBC : n les appels JDBC sont traduits en appels ODBC
sun.jdbc.odbc.JdbcOdbcDriver
P. Itey - INRIA
Java et JDBC - page 12
08/01/2001
2'%& GH 0LFURVRIW
n est devenu un standard de fait du monde Windows n tous les constructeurs de SGBD fournissent un driver
ODBC
08/01/2001
P. Itey - INRIA
$YDQWDJHV GH 2'%&
on dveloppe lapplication sans se soucier de la source de donnes la base de donnes utilise ct serveur peut tre interchange sans aucune modification du dveloppement fait dans la partie cliente
08/01/2001
P. Itey - INRIA
'ULYHU GH W\SH ,,
Driver dAPI natif : n fait appel des fonctions natives (non Java) de l API
du SGBDR
08/01/2001
Pilote tout Java ou 100% Java n interagit avec une API rseau gnrique et
communique avec une application intermdiaire (middleware) sur le serveur
08/01/2001
P. Itey - INRIA
'ULYHU GH W\SH ,9
Driver 100% Java mais utilisant le protocole rseau du SGBDR n interagit avec la base de donnes via des sockets
n gnralement fourni par lditeur n aucun problme dexcution pour une applet si le
SGBDR est install au mme endroit que le serveur Web
scurit pour lutilisation des sockets : une applet ne peut ouvrir une connexion que sur la machine o elle est hberge
P. Itey - INRIA
Java et JDBC - page 17
08/01/2001
Une application Java peut travailler avec tous les types de drivers Pour une applet (untrusted) : n type I ou II : impossible
une applet ne peut pas charger distance du code natif (non Java) sur son poste dexcution si le serveur middleware se situe au mme endroit que le serveur Web (car communication par sockets avec lapplet) si le SGBDR install au mme endroit que le serveur Web
P. Itey - INRIA
Java et JDBC - page 18
n type IV : possible
08/01/2001
Constitue une autre solution pour accder une base de donnes travers le Web Les servlets sont le pendant des applets ct serveur : n programmes Java travaillant directement avec le
serveur Web n pas de contraintes de scurit comme les applets n peuvent gnrer des pages HTML contenant les donnes rcupres grce JDBC (par exple)
08/01/2001
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
0RGqOH WLHUV
n Principe :
lapplication (ou lapplet) cliente utilise JDBC pour parler directement avec le SGBD qui gre la base de donnes simple mettre en uvre bon choix pour des applications clientes peu volues, livrer rapidement et nexigeant que peu de maintenance
n Avantages :
n Inconvnients :
dpendance forte entre le client et la structure du SGBDR g modification du client si lenvironnement serveur change tendance avoir des clients graisseux g tout le traitement est du ct client
08/01/2001
P. Itey - INRIA
$UFKLWHFWXUH WLHUV
Client
$SSOLFDWLRQ RX $SSOHW ' % &
TCP / Protocole propritaire
Serveur
6*%'
%'
08/01/2001
P. Itey - INRIA
0RGqOH WLHUV
n Principes :
le serveur middleware est linterlocuteur direct du code Java client; cest lui qui change des donnes avec le SGBDR pas forcemment crit en Java si cest le cas : utilise souvent JDBC pour accder au SGBDR
n Avantages:
le middleware peut ajouter un niveau de scurit plusieurs supports pour les changes avec le client : g sockets, RMI Java, CORBA, applets : le SGBDR peut se trouver sur une autre machine : g mais serveur Web et middleware au mme endroit facilite lutilisation de clients lgers
08/01/2001
P. Itey - INRIA
$UFKLWHFWXUH WLHUV
Client
$SSOLFDWLRQ RX $SSOHW -'%& 6*%'
TCP / RMI / CORBA
Serveur
0LGGOHZDUH
%'
08/01/2001
P. Itey - INRIA
6FpQDULRV GXWLOLVDWLRQ
Scnario 1 : n architecture 2-tiers avec une application Java Scnario 2 : n architecture 2-tiers avec une applet Java Scnario 3 : n architecture 3-tiers et applet/application Java
P. Itey - INRIA
Java et JDBC - page 25
08/01/2001
6FpQDULR
Ehhhyv 8yvr E9789vrHhhtr 79 E9786yv9vrDDD
Dhr
Trr TB79S
79
08/01/2001
P. Itey - INRIA
6FpQDULR
Ehhhyr 8yvr E9789vrHhhtr
E9786yr9vrDDDDW
Dhr Drr
TB79S
Xrirr
79 Trr
08/01/2001
P. Itey - INRIA
6FpQDULR
$UFKLWHFWXUH WLHUV
8yvr Ehhhyr hyvphv
Dhr Drr
E9789vrHhhtr
TB79S
E9786yv9vr
TB79S
79 6yvphvTrr
79
08/01/2001
Dhr
P. Itey - INRIA
0. Importer le package java.sql 1. Enregistrer le driver JDBC 2. Etablir la connexion la base de donnes 3. Crer une zone de description de requte 4. Excuter la requte 5. Traiter les donnes retournes 6. Fermer les diffrents espaces
P. Itey - INRIA
Java et JDBC - page 29
08/01/2001
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("oracle.jdbc.driver.OracleDriver");
n quand une classe Driver est charge, elle doit crer une
instance delle mme et senregistrer auprs du DriverManager
08/01/2001
P. Itey - INRIA
85/ GH FRQQH[LRQ
n qui spcifie :
1) lutilisation de JDBC 2) le driver ou le type de SGBDR 3) lidentification de la base locale ou distante g avec des paramtres de configuration ventuels nom utilisateur, mot de passe, ...
n Exemples :
String url = "jdbc:odbc:maBase" ; String url = "jdbc:msql://leo.inria.fr:1114:maBase";
08/01/2001
P. Itey - INRIA
&RQQH[LRQ j OD EDVH
le DriverManager essaye tous les drivers qui se sont enregistrs (chargement en mmoire avec Class.forName()) jusqu ce quil trouve un driver qui peut se connecter la base
P. Itey - INRIA
Java et JDBC - page 32
08/01/2001
Lobjet Statement possde les mthodes ncessaires pour raliser les requtes sur la base associe la connexion dont il dpend 3 types de Statement : n Statement : requtes statiques simples n PreparedStatement : requtes dynamiques prcompiles (avec paramtres dentre/sortie) n CallableStatement : procdures stockes
08/01/2001
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
08/01/2001
executeQuery() et executeUpdate() de la classe Statement prennent comme argument une chane (String) indiquant la requte SQL
excuter :
Statement st = connexion.createStatement(); ResultSet rs = st.executeQuery( "SELECT nom, prenom FROM clients " + "WHERE nom='itey ORDER BY prenom"); int nb = st.executeUpdate("INSERT INTO dept(DEPT) " + "VALUES(06)");
08/01/2001
P. Itey - INRIA
P. Itey - INRIA
L objet ResultSet (retourn par lexcution de executeQuery() ) permet daccder aux champs des tuples slectionns
n seules les donnes demandes sont transfres en
mmoire par le driver JDBC
il faut donc les lire "manuellement" et les stocker dans des variables pour un usage ultrieur
08/01/2001
P. Itey - INRIA
JDBC 1.x : Il se parcourt itrativement ligne par ligne n par la mthode next()
retourne false si dernier tuple lu, true sinon chaque appel fait avancer le curseur sur le tuple suivant initialement, le curseur est positionn avant le premier tuple g excuter next() au moins une fois pour avoir le premier
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
Les colonnes sont rfrences par leur numro (commencent 1) ou par leur nom Laccs aux valeurs des colonnes se fait par les mthodes de la forme getXXX() n lecture du type de donnes XXX dans chaque colonne
du tuple courant
08/01/2001
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
Le driver JDBC traduit le type JDBC retourn par le SGBD en un type Java correspondant n le XXX de getXXX() est le nom du type Java
correspondant au type JDBC attendu
08/01/2001
Type Java String java.math.BigDecimal byte[] boolean int long float double java.sql.Date java.sql.Time ..
Java et JDBC - page 44
P. Itey - INRIA
Pour reprer les valeurs NULL de la base : n utiliser la mthode wasNull() de ResultSet
08/01/2001
P. Itey - INRIA
Pour terminer proprement un traitement, il faut fermer les diffrents espaces ouverts n sinon le garbage collector sen occupera mais moins
efficace
P. Itey - INRIA
La mthode getMetaData() permet dobtenir des informations sur les types de donnes du
ResultSet n elle renvoie des ResultSetMetaData n on peut connatre entre autres :
le nombre de colonne : getColumnCount() le nom dune colonne : getColumnName(int col) le nom de la table : getTableName(int col) si un NULL SQL peut tre stock dans une colonne : isNullable()
08/01/2001
P. Itey - INRIA
ResultSetMetaData
ResultSet rs = stmt.executeQuery("SELECT * FROM emp"); ResultSetMetaData rsmd = rs.getMetatData(); int nbColonnes = rsmd.getColumnCount(); for(int i = 1; i <= nbColonnes; i++) { // colonnes numerotes partir de 1 (et non 0) String nomCol = rsmd.getColumnName(i); }
08/01/2001
P. Itey - INRIA
DatabaseMetaData
Pour rcuprer des informations sur la base de donnes elle-mme, utiliser la mthode getMetaData() de l objet Connection n dpend du SGBD avec lequel on travaille
n elle renvoie des DatabaseMetaData n on peut connatre entre autres :
08/01/2001
5HTXrWHV SUpFRPSLOpHV
Lobjet PreparedStatement envoie une requte sans paramtres la base de donnes pour prcompilation et spcifiera le moment voulu la valeur des paramtres n plus rapide quun Statement classique
le SGBD n analyse quune seule fois la requte (recherche dune stratgie dexcution adquate) pour de nombreuses excutions dune mme requte SQL avec des paramtres variables
P. Itey - INRIA
n les arguments dynamiques sont spcifis par un "?" n ils sont ensuite positionns par les mthodes setInt() ,
setString() , setDate() , de PreparedStatement
le premier (int) indique le numro relatif de largument dans la requte le second indique la valeur positionner
08/01/2001
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
P. Itey - INRIA
De mme, pour annuler une transaction (ensemble de requtes SQL), lapplication peut envoyer la base un "rollback" par :
connexion.rollback();
08/01/2001
P. Itey - INRIA
([FHSWLRQV
SQLException est leve ds quune connexion ou un ordre SQL ne se passe pas correctement n la mthode getMessage() donne le message en clair
de lerreur
08/01/2001
-'%& HW 2UDFOH
ORACLE_HOME = CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes111.zip import java.sql.*; Class.forName("oracle.jdbc.driver.OracleDriver"); static final url = "jdbc:oracle:thin:@erato:1521:MINFO"; conn = DiverManager.getConnection(url, "itey", "mdpitey");
08/01/2001
P. Itey - INRIA
Rappel : avec le JDK 1.0, une applet ne peut pas charger un driver natif (I ou II) pour accder une base de donnes distante n pour y remdier: drivers III ou IV et modle 3-tiers
n
Avec le JDK 1.1 : API de scurit n une applet peut, sous certaines conditions de
signature, accder un driver natif n et se connecter directement au serveur du SGBD
08/01/2001
&RQFOXVLRQV
Conclusions sur l API JDBC : n jeu unique dinterfaces pour un accs homogne
une convention de nommage base sur les URL est utilise pour localiser le bon pilote et lui passer des informations
P. Itey - INRIA
Java et JDBC - page 58
08/01/2001
&RQFOXVLRQV
n Tous les grands diteurs de bases de donnes et les
socits spcialises proposent un driver JDBC pour leurs produits
08/01/2001
P. Itey - INRIA
08/01/2001
P. Itey - INRIA
(YROXWLRQV SUpYXHV
faciliter laccs aux schmas des BDs, augmenter les performances et amliorer les dveloppements
ensemble doutils pour effectuer un mapping bidirectionnel: entre objet et base relationnelle
P. Itey - INRIA
08/01/2001
n ct serveur :
un serveur WEB (http) g pour grer les connexions extrieures un serveur de bases de donnes (SGBD) g pour grer le systme dinformation et une API (CGI, scripting, Applets ou Servlets) g pour relier la base de donnes au WEB
08/01/2001
P. Itey - INRIA
&*,
n Principe :
un processus par requte est lanc sur le serveur renvoie du HTML gratuit peut tre crit dans nimporte quel langage
n Avantages :
n Inconvnients :
lent difficile dvelopper appels natifs des procdures du SGBD
08/01/2001
P. Itey - INRIA
6FULSWLQJ
n Principe :
script propre au constructeur intgr dans des pages HTML renvoie du HTML clair facile dvelopper
n Avantages :
n Inconvnients :
payant (cher) li un constructeur langage propre au SGBD et au serveur WEB
08/01/2001
P. Itey - INRIA
$SSOHWV
n Principe :
code Java excut sur le poste client entirement dvelopp en Java (AWT ou Swing)
n Avantages :
gratuit, pas de code HTML permet de grer des applications complexes portable (JDBC) indpendant des plate-formes matrielles et logicielles
n Inconvnients :
lent charger les serveurs WEB et SGBD doivent tre sur la mme machine
P. Itey - INRIA
Java et JDBC - page 65
08/01/2001
6HUYOHWV
n Principe :
n Avantages :
gratuit portable (JDBC) indpendant des plate-formes matrielles et logicielles rapide facile dvelopper
n Inconvnients :
limit HTML
P. Itey - INRIA
Java et JDBC - page 66
08/01/2001
trop lents trop difficile de conserver les donnes d une requte l autre
pour les applications clientes gourmandes en temps de calcul pour la gnration dynamique de pages HTML
P. Itey - INRIA
Java et JDBC - page 67
n et les servlets
08/01/2001
/HV 7'V
08/01/2001
P. Itey - INRIA
7' 1XPpUR
Client (PC/NT)
' % &
Serveur (Station/Unix)
6*%' 2UDFOH
$SSOLFDWLRQ -$9$
08/01/2001
P. Itey - INRIA