Académique Documents
Professionnel Documents
Culture Documents
Programmation Procdurale
et SQL
Didier DONSEZ
Universit Joseph Fourier
IMA IMAG/LSR/ADELE
'LGLHU'RQVH]#LPDJIU
'LGLHU'RQVH]#LHHHRUJ
Motivations (i)
Limites de SQL
Langage dclaratif (non procdural)
facile d exprimer des requtes
MAIS pas de structure de contrle
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Sinon
Motivations (ii)
Besoins
Procdure
variables locales
structures de contrle
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
ERXFOHLWpUDWLYHWHVWH[FHSWLRQ
Excution
par le client / par le serveur
Curseur
3 Solutions
SQL Dynamique
Interface SQL/CLI et Middleware ODBC et JDBC
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Remarque 1:
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
180%(5[
'(&,0$/[\180%(5[\
9$5&+$5[
LQW"ORQJ"
IORDW "GRXEOH"
FKDU>[@"VWULQJ"
constructeur de type
Logique 3 niveaux
758(81.12:)$/6(
Remarque 2:
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple
Interface SQL/CLI
et Middleware ODBC et JDBC
Motivations
Dynamic SQL
SQL/CLI
ODBC
JDBC
DBI pour PERL
Avantages et Inconvnients
Motivations
Connexions simultanes vers plusieurs bases
Consultation et Modification
La requte n est analyse qu l excution
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
2 formes
Dynamic SQL
utilisation de sections (proche d Embedded SQL)
ncessite un prcompilateur
SQL/CLI
API bas niveau pour les applications
Dynamic SQL
Requtes SQL
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple en C
10
L interface SQL/CLI
CLI : Call Level Interface
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
11
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
SQL/CLI
JDBC
Java DataBase Connectivity (JavaSoft)
SQL/CLI
IDAPI
Integrated Database Application
Interface (Borland)
DAL
Data Access Language (DEC/Apple)
DRDA
Distributed Remote Database Access
(IBM/XOpen)
A
fichiers
P
U SQL*Net
(Oracle)Adapteur IDAPI
P
T
I
L
I
S
A
T
E
U
R
L
I
C
A
T
I
O
N
S
API
Outils
Interactif
I
D
A
P
I
pour DBase
Adapteur IDAPI
pour SQL*Net
Adapteur Driver ODBC
pour Oracle
IDAPI
pour
Driver ODBC
ODBC pour MSAccess
locaux
TCP/IP
Serveur
ORACLE
fichiers
locaux
Objectif
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Principes
12
13
Architecture d ODBC
Architecture Modulaire
utilisant des drivers d adaptation
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
TCP/IP
L
I
API
SQL/NET
Outils
Interactifs
O
D
B
C
Driver ODBC
pour Oracle
Driver ODBC
pour MS Access
Driver ODBC
pour CQL
SGF
L
E
C
T
E
U
R
Serveur Oracle
Base
Distante
Fichier
Local
ISO 7816-7
Carte GEMxCOS
Base
CQL
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
14
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Composant ActiveX
15
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
3DUFRXUVG XQHWDEOHDYHFXQFXUVHXU
#/$1*8$*( -6FULSW !
LQFOXGH ILOH DGRMDYDVLQF!
+70/!+($'!7,7/(!5HTXrWH6LPSOH7,7/(!+($'!%2'<!
K!/LVWHGHV$XWHXUVK!KU!
YDUFXU'LU 6HUYHU0DS3DWK??LLVVDPSOHV??VGN??DVS??GDWDEDVH??DXWKRUVPGE
YDUR&RQQ 6HUYHU&UHDWH2EMHFW$'2'%&RQQHFWLRQ
R&RQQ2SHQ'%4 FXU'LU'ULYHU ^0LFURVRIW$FFHVV'ULYHU
PGE`
'ULYHU,G ),/ 06$FFHVV
YDUR5V R&RQQ([HFXWH6(/(&7
)URPDXWKRUV
!
7$%/(ERUGHU !
ZKLOH R5VHRI^!
WU!
IRU,QGH[ ,QGH[R5VILHOGVFRXQW,QGH[^!
7' 9$OLJQ WRS! R5V,QGH[!7'!
`!
WU!
R5V0RYH1H[W
`!
7$%/(!
R5VFORVH R&RQQFORVH!
%2'<!+70/!
16
17
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
$MRXWHW6XSSUHVVLRQG XQHOLJQH
K!6XSSUHVVLRQHW$MRXWG XQDXWHXUK!KU!
R5V 6HUYHU&UHDWH2EMHFW$'2'%5HFRUGVHW
R5V$FWLYH&RQQHFWLRQ R&RQQ
R5V6RXUFH 6(/(&7
)520 DXWKRUV:KHUH
R5V&XUVRU7\SH DG2SHQ6WDWLFR5V/RFN7\SH DG/RFN2SWLPLVWLF
R5V2SHQR5V$GGQHZ
R5V$XWKRU9DOXH -RKQ6WHLQEHFN
R5V<HDU%RUQ9DOXH
R5V8SGDWH
5HVSRQVH:ULWHS!$XWHXU ,QVHUpR5V$XWKRUR5V<HDU%RUQR5V&ORVH
R5V 6HUYHU&UHDWH2EMHFW$'2'%5HFRUGVHW
R5V$FWLYH&RQQHFWLRQ R&RQQ
R5V6RXUFH 6(/(&7
)520 DXWKRUV :+(5( <HDU%RUQ DQG $XWKRU
-RKQ6WHLQEHFN
R5V&XUVRU7\SH DG2SHQ)RUZDUG2QO\ R5V/RFN7\SH DG/RFN2SWLPLVWLF
R5V2SHQR5V'HOHWHR5V8SGDWH
5HVSRQVH:ULWHS!$XWHXU6XSSULPp3DXO(QILHOG
R5V&ORVH
!
%2'<!+70/!
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
,QYRFDWLRQG XQH3URFpGXUH6WRFNpH
#/$1*8$*( -6FULSW !
LQFOXGH ILOH DGRMDYDVLQF!
+70/!+($'!7,7/(!,QYRFDWLRQG XQHSURFpGXUHVWRFNp7,7/(!+($'!
%2'<!
K!,QYRFDWLRQG XQHSURFpGXUHVWRFNpK!KU!
YDUR&RQQ 6HUYHU&UHDWH2EMHFW$'2'%&RQQHFWLRQ
YDUR&PG 6HUYHU&UHDWH2EMHFW$'2'%&RPPDQG
R&RQQ2SHQ'61 /RFDO6HUYHU8,' VD3:' '$7$%$6( SXEV
R&PG$FWLYH&RQQHFWLRQ R&RQQ
R&PG&RPPDQG7H[W ^FDOO E\UR\DOW\"`
R&PG3DUDPHWHUV$SSHQGR
&PG&UHDWH3DUDPHWHU#3HUFHQWDJH DG,QWHJHU DG3DUDP,QSXW
R&PG#3HUFHQWDJH
YDUR5V R&PG([HFXWH
!
,'GHO
DXWHXU 5HVSRQVH:ULWHR5VDXBLG!%5!
%2'<!+70/!
18
JDBC
-DYD'DWD%DVH&RQQHFWLYLW\
Motivations
API Java pour manipuler des Tables SQL
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
19
20
Architecture JDBC
Composants dadaptation (Drivers)
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Driver JDBC
pour DBase
$SSOL
HQ-DYD
JDBC
Mng
$SSOL
HQ-DYD
Driver JDBC
pour SQL*Net
Driver ODBC
Pont
pour Oracle
JDBC
/
Driver ODBC
ODBC pour MSAccess
fichiers
locaux
Serveur
ORACLE
TCP/IP
fichiers
locaux
21
Drivers JDBC
4 types de drivers JDBC
pur Java
+ DONC tlchargeable
natif
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
serveur Middleware
- encombrement serveur
+ protocole autre que TCP/IP
22
Drivers JDBC :
pur Java vs Natif
$SSOLFDWLRQ$SSOHW
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
-'%&0DQDJHU
$SSOLFDWLRQ$SSOHW
-'%&0DQDJHU
'ULYHU-DYD
'ULYHUHQSXU-DYD
$3,1DWLYH&OLHQW%'
&&
6HUYHXU%'
6HUYHXU%'
23
Drivers JDBC :
pont ODBC vs Middleware
$SSOLFDWLRQ$SSOHW
$SSOLFDWLRQ$SSOHW
'ULYHU-DYD2'%&
3RQW-'%&2'%&&
'ULYHU-DYD
&OLHQW0LGGOHZDUH
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
-'%&0DQDJHU
'ULYHU2'%&&&
-'%&0DQDJHU
6HUYHXU 0LGGOHZDUH
$3,&OLHQW%'
6HUYHXU%'
2'%& 0QJ
'ULYHU2'%&
6HUYHXU%'
3DFNDJHMDYDVTO
Interfaces
DriverManager
Connection, PooledConnection, XAConnection
Statement
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
PreparedStatement
CallableStatement
ResultSet
ResultSetMetaData
DatabaseMetaData
RowSet
SQLData, SQLInput, SQLOutput
Classes
DriverManager, DriverPropertyInfo
Date, Time, TimeStamp, Types, Struct,
64/([FHSWLRQ64/:DUQLQJ'DWD7UXQFDWLRQ
24
25
Connexion JDBC
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
classe java.sql.Connection
URL dune source de donnes (relationnelle)
jdbc:<subprotocol>:<subname>
jdbc:dcenaming:accounts-payable
jdbc:dbnet://dbms.mycomp.com:356/ecom
jdbc:msql://dbsv.acme.com/user
jdbc:oracle:thin:@enee:1521:ISTV
jdbc:odbc:ECOM
jdbc:odbc:ECOM;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:ECOM;UID=admin;PWD=nimda
jdbc:GemDBJdbc:/1F00/1F10
...
Extension JDBC3.0
26
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
JDBC &XUVHXU
FODVV (PSOR\H ^
SXEOLFVWDWLFYRLG PDLQ6WULQJ DUJV >@
WKURZV 64/([FHSWLRQ &ODVV1RW)RXQG([FHSWLRQ ^WU\^
&ODVVIRU1DPH RUDFOHMGEFGULYHU2UDFOH'ULYHU
&ODVVIRU1DPHVXQMGEFRGEF-GEF2GEF'ULYHU
6WULQJ GEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQGEXUOWRWRSDVVHPRW
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7 QXPHPS QDPH VDODU\ )520(03/2<(
ZKLOH UVQH[W^
6WULQJV UVJHW6WULQJ
IORDW I UVJHW)ORDWVDODU\
6\VWHPRXWSULQWOQVJDJQHI
`UVFORVH
`FDWFK([FHSWLRQH^HSULQW6WDFN7UDFH``
27
JDBC YDOHXUQXOOH
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Rappel
une valeur nulle (NULL) en SQL signifie :
valeur inconnue, valeur non renseigne, ...
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7 QXPHPS QDPH VDODU\ )520(03/2<(
ZKLOH UVQH[W^6WULQJV UVJHW6WULQJ
IORDW I UVJHW)ORDWVDODU\
LIUVZDV1XOO 6\VWHPRXWSULQWOQ VQ
DSDVGHVDODLUH
HOVH
6\VWHPRXWSULQWOQ VJDJQHI
` UVFORVH
Remarque
DSDVGHVDODLUH
HOVH
6\VWHPRXWSULQWOQ VJDJQHUVJHW)ORDW
cependant l implantation tant difficile, elle a t abandonne
JDBC
28
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
SDVVDJHG DUJXPHQWVPRGLILFDWLRQWUDQVDFWLRQ
FODVV (PSOR\H ^
SXEOLFVWDWLFLQW XSGDWH(PSOR\H LQWQXP6WULQJQRP
WKURZV 64/([FHSWLRQ &ODVV1RW)RXQG([FHSWLRQ ^WU\^
&ODVVIRU1DPH RUDFOHMGEFGULYHU2UDFOH'ULYHU
6WULQJ GEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQGEXUOWRWRSDVVHPRW
FRQQVHW$XWR&RPPLWIDOVH
3UHSDUHG6WDWHPHQW SVWPW FRQQSUHSDUH6WDWHPHQW
SVPWFOHDU3DUDPHWHUV
SVPWVHW1XOO SVPWVHW6WULQJQRPSVPWVHW,QWQXP
LQWQE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH
LIQE/LJQHV0RGLILHHV FRQQFRPPLWHOVH FRQQUROOEDFN
`FDWFK([FHSWLRQH^
HSULQW6WDFN7UDFH``
29
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
JDBC
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
6WUHDPV$6&,,HW%LQDLUHV
FODVV (PSOR\H ^
SXEOLF VWDWLFYRLG LQIR&RQQHFWLRQFRQQ LQWQXP
WKURZV 64/([FHSWLRQ^WU\ ^
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7 QDPHSKRWR FY )520(03/2<(
ZKLOH UVQH[W^
6WULQJV UVJHW6WULQJ
%XIIHUHG5HDGHUFY QHZ %XIIHUHG5HDGHU
QHZ ,QSXW6WUHDP5HDGHUUVJHW$VFLL6WUHDPFY
ZKLOHFYUHDG\^RXWSULQWOQFYUHDGOLQH`
%XIIHUHG,QSXW6WUHDPJLI'DWD QHZ %XIIHUHG,QSXW6WUHDP
QHZ %LQDU\,QSXW6WUHDPUVJHW%LQDU\6WUHDPSKRWR
ZKLOHOHQ JLI'DWDUHDGEXIEXIOHQJWK ^
`
`UVFORVH
30
31
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
JDBC 5HVXOW6HW0HWD'DWD
FODVV+70/5HVXOW6HW^/LYUH6HUYOHW([S
SULYDWH5HVXOW6HWUV
SXEOLF+70/5HVXOW6HW5HVXOW6HWUV^WKLVUV UV`
SXEOLF6WULQJ WR6WULQJ^
6WULQJ%XIIHURXW QHZ 6WULQJ%XIIHURXWDSSHQG7$%/(!
5HVXOW6HW0HWD'DWD UVPG UVJHW0HWD'DWD
LQWQXPFROV UVPGJHW&ROXPQ&RXQW
RXWDSSHQG75!
IRULQWL LQXPFROVL^
RXWDSSHQG7+!DSSHQGUVPGJHW&ROXPQ/DEHOL
`
RXWDSSHQG75!
JDBC
JHW2EMHFW
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
VXLWHGH+70/5HVXOW6HWWR6WULQJ
ZKLOH UVQH[W^
RXWDSSHQG75!
IRULQW L LQXPFROVL^
RXWDSSHQG7+!
2EMHFWREM UVJHW2EMHFWL
RXWDSSHQGREM QXOO" QEVSREMWR6WULQJ
RXWDSSHQG7+!
`
RXWDSSHQG75!
`
RXWDSSHQG7$%/(!
32
33
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
JDBC JHW2EMHFW
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7 QXPHPS QDPH VDODU\ )520(03/2<(
ZKLOH UVQH[W^
6WULQJV UVJHW6WULQJ
IORDW I UVJHW)ORDWVDODU\
LIUVZDV1XOOHOVHZDV1XOOWHVWHVLODGHUQLqUHYDOHXUHVW18//
`
34
180(5,&
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
'(&,0$/
%,7
7,1<,17
60$//,17
,17(*(5
%,*,17
5($/
)/2$7
'28%/(
7\SH-DYD
7\SH-DYD
UHWRXUQpSDUJHW2EMHFW
0pWKRGHUHFRPPDQGpH
DXOLHXGHJHW2EMHFW
35
7\SH-DYD
UHWRXUQpSDUJHW2EMHFW
6WULQJ
6WULQJ
6WULQJ
6WULQJ
6WULQJ
6WULQJ
%,1$5<
E\WH>@
9$5%,1$5<
E\WH>@
/21*9$5%,1$5< E\WH>@
E\WH>@
E\WH>@
E\WH>@
'$7(
7,0(
7,0(67$03
MDYDVTO'DWH
MDYDVTO7LPH
MDYDVTO7LPHVWDPS
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
&+$5
9$5&+$5
/21*9$5&+$5
7\SH-DYD
MDYDVTO'DWH
MDYDVTO7LPH
MDYDVTO7LPHVWDPS
0pWKRGHUHFRPPDQGpH
DXOLHXGHJHW2EMHFW
6WULQJ JHW6WULQJ
6WULQJ JHW6WULQJ
,QSXW6WUHDP
JHW$VFLL6WUHDP
,QSXW6WUHDP
JHW8QLFRGH6WUHDP
E\WH>@JHW%\WHV
E\WH>@JHW%\WHV
,QSXW6WUHDP
JHW%LQDU\6WUHDP
MDYDVTO'DWHJHW'DWH
MDYDVTO7LPHJHW7LPH
MDYDVTO7LPHVWDPS
JHW7LPHVWDPS
36
(fichier d images, )
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
64/([FHSWLRQ64/:DUQLQJ'DWD7UXQFDWLRQ
WU\ ^
3UHSDUHG6WDWHPHQWSVWPW FRQQSUHSDUH6WDWHPHQW
SVPWVHW1XOO SVPWVHW6WULQJQRP SVPWVHW,QW QXP
QE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH
`
FDWFK'DWD7UXQFDWLRQ H^
'HVGRQQpHVRQWpWpWURQTXpHVRQGpFLGHGHQHULHQIDLUH
`
FDWFK64/([FHSWLRQH^
6\VWHPRXWSULQWOQHJHW0HVVDJH
ZKLOHH HJHW1H[W([FHSWLRQ QXOO^
6\VWHPRXWSULQWOQHJHW0HVVDJH
`
`
37
38
Evolution de JDBC
JDBC 1.0 (Janvier 1996)
JDBC 2.0 (Mars 1998)
JDBC 3.0 (Septembre 2000)
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Echapement SQL
dans les Statements
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
VWPWVHW(VFDSH3URFHVVLQJWUXH
5HVXOW6HWUV
HFKDSHPHQW GHZLOGFDUG64/BHW
UV VWPWH[HFXWH4XHU\6(/(&7QXPHPS )520(03/2<(
:+(5(QDPH /,.(
??B
^HVFDSH
??
`
DSSHOjGHVIRQFWLRQVGX6*%'
UV VWPWH[HFXWH4XHU\6(/(&7 QXPHPS )520(03/2<(
:+(5( QDPH ^IQXVHU`
MRLQWXUHH[WHUQH
UV VWPWH[HFXWH4XHU\6(/(&7 QXPHPS680DPRXQW
)520^RM (03/2<(/()7287(5-2,16$/(86,1*QXPHPS`
DSSHOGHSURFpGXUHVWRFNpH
^" FDOO SURFHGXUHBQDPH>""""@`
^FDOO SURFHGXUHBQDPH>""""@`
39
40
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
UVXSGDWH5RZ
UVXSGDWH5RZ
UVXSGDWH5RZ
41
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Insertion et suppression
depuis Java
42
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HW7<3(B6&52//B6(16,7,9( 5HVXOW6HW&21&85B83'$7($%/(
5HVXOW6HWXSUV VWPWH[HFXWH4XHU\6(/(&7
)520(PSOR\H
XSUVPRYH7R,QVHUW5RZ
DXWUHVPpWKRGHVILUVW ODVWEHIRUH)LUVW DIWHU/DVW
DEVROXWH SUHYLRXV UHODWLYHPRYH7R&XUUHQW5RZ
XSUVXSGDWH6WULQJ1DPH-RVHSK
XSUVXSGDWH,QW
XSUVXSGDWH)ORDW6DODU\I
XSUVLQVHUW5RZ
XSUVODVW
XSUVGHOHWH5RZ
43
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
FRQVHW$XWR&RPPLWIDOVH
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
VWPWDGG%DWFK,16(57,172 (PSOR\H 9$/8(6
-DFTXHV
I
VWPWDGG%DWFK,16(57,172 (PSOR\H 9$/8(6
3DXO
I
VWPWDGG%DWFK,16(57,172 (PSOR\H 9$/8(6
0DULH
18//
LQW >@ XSGDWH&RXQWV VWPWH[HFXWH%DWFK
3UHSDUHG6WDWHPHQWSVWPW FRQSUHSDUHG6WDWHPHQW
,16(57,172 (PSOR\H 9$/8(6" ""
SVWPWVHW,QWSVWPWVHW6WULQJ
3LHUUH
SVWPWVHW)ORDWI
SVWPWDGG%DWFK
SVWPWVHW,QWSVWPWVHW6WULQJ
0DGHOHLQH
SVWPWVHW1XOO
SVWPWDGG%DWFK
LQW >@SXSGDWH&RXQWV SVWPWH[HFXWH%DWFK
FRQFRPPLW
44
Interface RowSet
Composants JavaBean
pour des sources de donnes tabulaires
tend ResultSet
Modle d vnement JavaBean
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
addRowSetListener, removeRowSetListener
peut tre connect un bean PieChart par exemple
Implmentations possibles
JDBCRowSet (JDBC/TCP)
CachedRowSet (RMI/IIOP) XWLOLVDEOHVSDUGHV3'$
WebRowSet (HTTP/XML)
YRLU>:KLWHHWDO@S
45
DataSource
Motivation
rendre les programmes indpendants des sources de donnes
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Datasource
FRQFORVH
Sous-classes
XADataSource, ConnectionPoolDataSource
46
Classes
PooledConnection
reprsente une des connexions gres par le pool
ConnectionEventListener
permet de notifier les oprations effectues sur le PooledConnection
ConnectionPoolDataSource
permet de rcuprer un PooledConnection via JNDI
3RRO&RQQHFWLRQJHW3RROHG&RQQHFWLRQ
47
Autres interfaces
Array
reprsente un tableau SQL
Struct
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Ref
SQLInput et SQLOutput
SQLData
Java-Aware Database
JHW2EMHFWHWVHW2EMHFW
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
SGBDOO et JDBMS
49
50
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
51
Application
fichiers
locaux
fichiers
locaux
-'%&
r
cha
gem
ent
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
-'%&
Applet
Serveur BD
Serveur BD
Serveur
HTTPD
52
Servlet
-'%&
ent
Serveur BD
gem
Invocation
CGI
r
cha
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
fichiers
locaux
HTTPD
-HHYHV-LJVDZ
53
Serveur BD
Servlet
-'%&
ent
HTTPD
VHUYOHW
GULYHU-'%&
gem
Invocation
CGI
r
cha
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
fichiers
locaux
HTTPD
-HHYHV-LJVDZ
54
JDBC et ANT
Tche ANT pour envoyer des ordres SQL
Via un driver JDBC
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
HFKR!4XHU\ WDEOHVHFKR!
VTO
GULYHU ^GULYHU`XUO ^XUO`XVHULG ^XVHULG`SDVVZRUG ^SDVVZRUG`
SULQW \HVFODVVSDWKUHI VTOGULYHUSDWK!
WUDQVDFWLRQ!>&'$7$>
6(/(&7
)520 $LU&UDIW
6(/(&7
)520)OLJKW
@@!WUDQVDFWLRQ!
WUDQVDFWLRQ!>&'$7$>
6(/(&7
)5207LFNHW
6(/(&7
)520 &XVWRPHU
@@!WUDQVDFWLRQ!VTO!
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
$FFqVDX[%'V SDUGHVVFULSWV3(5/
KWWSZZZKHUPHWLFDFRPWHFKQRORJLD'%,
XVHVWULFWXVH'%,
P\ GEK '%,!FRQQHFW
GEL2UDFOHRUFO
WRWR
SDVVHGHPRW
^5DLVH(UURU !$XWR&RPPLW !`
__GLH'DWDEDVHFRQQHFWLRQ QRWPDGH'%,HUUVWU
P\ #QDPHV 'X0D
P\ VTO TT^6(/(&7QDPHVDODU\ )520 HPSOR\HHV :+(5( QDPH /,.("`
P\ VWK GEK!SUHSDUHVTO
IRU#QDPHV ^
VWK!ELQGBSDUDPB'%,64/B9$5&+$5VWK!H[HFXWH
P\QRPVDOVWK!ELQGBFROXPQV XQGHI?QRP?VDO
ZKLOHVWK!IHWFK^SULQWQRPHVWSD\pVDO?Q`
`
VWK!ILQLVKGEK!GLVFRQQHFW
55
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
7UDQVDFWLRQV
XVHVWULFWXVH'%,
P\ GEK '%,!FRQQHFW
GEL2UDFOHRUFO
MHIIUH\
MHIIVSDVVZRUG
^5DLVH(UURU !$XWR&RPPLW !`
__GLH'DWDEDVHFRQQHFWLRQ QRWPDGH'%,HUUVWU
P\ #UHFRUGV
>'XSRQW@>'XUDQG@>0DUWLQ@
P\ VTO TT^,16(57,172 HPSOR\HHV 9$/8(6"""`
P\ VWK GEK!SUHSDUHVTO
IRU#UHFRUGV^
HYDO ^
VWK!ELQGBSDUDP#B!>@'%,64/B,17(*(5
VWK!ELQGBSDUDP#B!>@'%,64/B9$5&+$5
VWK!ELQGBSDUDP#B!>@'%,64/B,17(*(5
VWK!H[HFXWHGEK!FRPPLW
`
LI#^ ZDUQ 'DWDEDVHHUURU'%,HUUVWU?QGEK!UROOEDFN`
`
VWK!ILQLVKGEK!GLVFRQQHFW
56
Embedded SQL
Motivations
Oracle Pro*C
Informix ESQL
SQLJ
58
Motivation
Syntaxe plus concise que SQL/CLI
Analyse statique
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Prcompilation
Source
PL
+
ordres SQL
imbriqus
PrCompilateur
E-SQL dans PL
Source
PL
+
ordres SQL/CLI
imbriqus
ou ordres natifs
Compilateur
PL
Excutable
Base
MetaBase
59
Embedded SQL
Sections spciales
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
(;(&64/%(*,1(1''(&/$5(6(&7,21
pour les dclarations de variables 3GL partages avec SQL
(;(&64/6(/(&7,172
pour l excution d une requte SQL
Prcompilateurs
C
Informix ESQL/C
Oracle Pro*C
Java
SQLJ 2UDFOH7DQGHP,%06\EDVH
Java Relational Binding $UGHQW6RIWZDUH
60
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple Pro*C
EXEC SQL INCLUDE SQLCA; /* manipulation des erreurs */
EXEC SQL BEGIN DECLARE SECTION;
char nom[21]; float salaire;
EXEC SQL END DECLARE SECTION;
scanf("%s",nom);
EXEC SQL EXECUTE
SELECT salary INTO :salaire
FROM Employe WHERE name = :nom;
END-EXEC;
if (sqlca.sqlcode != 0)
VTOHUUPFPHVVDJHG HUUHXUVTOHUUPOVDORQJXHXU
printf(" Erreur dexecution.\n %.70s\n",
sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
else
printf ("%s gagne %d $\n", nom, salaire);
61
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
64
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Informix ESQL/C
EXEC SQL DECLARE cursemp CURSOR FOR
SELECT name, salary INTO QRPVDOQXOOBIODJ
FROMEmploye FROM items
FOR READ ONLY;
EXEC SQL OPEN cursemp;
while(SQLCODE == 0) {
EXEC SQL FETCH cursemp;
if(SQLCODE == 0)
if (null_flag < 0)printf("%d gagne rien\n", nom)
else
printf("%s gagne %d$\n", nom, sal);
}
EXEC SQL CLOSE cursemp;
65
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple
6\VWHPRXWSULQWOQQRPHVWSD\pVDO
VTO >FQ[5(&@^'(/(7()520(PSOR\H `VXUODFRQQH[LRQFQ[5(&
66
SQLJ - Itrateurs
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
1RWLRQGHFXUVHXU
VTO SXEOLF LWHUDWRU,WHU(PS 6WULQJ LQWGpFODUDWLRQG XQHFODVVHG LWpUDWHXU
,WHU(PSLWHUGpFODUDWLRQG XQREMHW LWpUDWHXU
6WULQJQRPLQW VDOLQWF
VTOLWHU ^6(/(&7QDPHVDODU\ )520(PSOR\H `
ZKLOH WUXH^
VTO ^)(7&+LWHU ,172QRPVDO`
LILWHUHQG)HWFKEUHDN
LIF6\VWHPRXWSULQWOQQRPHVWSD\pVDO
`
LWHUILUVWVHUHSRVLWLRQQHDXSUHPLHUUpVXOWDW
ZKLOHLWHUQH[W^VHSRVLWLRQQHVXUOHVUpVXOWDWVHQSRVLWLRQLPSDLUH
6\VWHPRXWSULQWOQ LWHUQDPHHVWSD\pLWHUVDODU\
`
67
SQLJ - Autres
Modification au niveau de l itrateur
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Valeurs Nulles
Blocs et Atomicit
68
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
,WHU(PSLWHU
5HVXOW6HWUV VWPWH[HFXWH4XHU\6(/(&7QDPH VDODU\ )520(PSOR\H
VTOLWHU UV
ZKLOHLWHUQH[W^
6\VWHPRXWSULQWOQ LWHUQDPHHVWSD\pLWHUVDODU\
`
69
JavaBlend
Mapping transparent
d objets Java avec les lignes d une base
relationnelle
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Extra JDBC
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
70
SQL Procdural
Motivations
Architecture
SQL3 / PSM
Informix SPL
Oracle PL/SQL
Un nouveau venu : Java
72
Motivations
pour un SQL procdural
Inconvnients
Dynamic SQL et Middleware SQL (ODBC, JDBC, ...)
requte vrifie l excution (runtime)
typage faible variable hte et curseur
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Client
SQL
SQL
SQL
SQL
Serveur
SQL
BDR
73
Architecture Client-Serveur
Dynamic SQL et Embedded SQL
Client
SQL
SQL
SQL
SQL
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Procdure anonyme
Client
PL/SQL
Procdure stocke
Client
RPC
Serveur
SQL
BDR
Moteur Serveur
PL/SQL SQL
BDR
Moteur Serveur
PL/SQL SQL
BDR
Procdure
Stocke
PL/SQL
74
Architecture Client-Serveur
Triggers
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
SQL
Update,
Delete,
Insert
Client
Moteur Serveur
PL/SQL SQL
Action
PL/SQL
d un
Trigger
BDR
75
Standard et Langages
Le standard
SQL3 / PSM
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Les diteurs
Informix SPL
Oracle PL/SQL
Remarque
76
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Procdures Stockes
Actions des Dclencheur Triggers
Oracle SQL*MENU, SQL*FORMS
77
Syntaxe
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
DECLARE
BEGIN
EXCEPTION
END;
.
Run;
-- optionel
-- optionel
78
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
79
Instructions
Affectation
Instructions SQL
Requte
SELECT, INSERT, UPDATE, DELETE
Transaction
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Curseur
DECLARE, OPEN, FETCH, CLOSE, WHERE CURRENT OF
Structures de Contrle
imbrication illimite
IF...THEN...ELSIF...END IF
boucles FOR, WHILE, LOOP et EXIT, GOTO
Exceptions
Exceptions internes au SGBD ou dfinies par l utilisateur
Plusieurs niveaux d exception
80
Instructions
Affectation
YDULDEOH! := YDULDEOHRXH[SUHVVLRQ!;
SELECT YDULDEOH! INTO YDULDEOH! VXLWHGHODFODXVH )520:+(5(! ;
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Test
Boucles
81
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
SELECT INTO
DECLARE
masseSalairialePlus10000 Employe.salary%TYPE;
BEGIN
SELECT
SUM(salary)
INTO
masseSalairialePlus10000
FROM
Employe
WHERE
salary > 10000;
END;
RETURNING
82
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exceptions (i)
declare
s Employe.salary%TYPE;
--variable locale
EHJLQ
EHJLQ
select salary into s from Employe where numemp = num;
H[FHSWLRQ
ZKHQ QRBGDWDBIRXQG
EHJLQ
s := -1; notifieErreur (num); -- Appel d une autre procdure
HQG
HQG
H[FHSWLRQ
ZKHQ QRBGDWDBIRXQG
EHJLQ
QRWLILH(UUHXUQXP -DPDLVDWWHLQW
HQG
ZKHQRWKHUVWKHQQXOO
HQG
83
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exceptions (ii)
declare
HB'HSDVVHPHQW
(;&(37,21 GpFODUDWLRQG XQHH[FHSWLRQXWLOLVDWHXU
s
Employe.salary%TYPE;
EHJLQ
begin
select sum(salary) into s from Employe;
if s > 1000000 then
UDLVH HB'HSDVVHPHQW;
end if;
exception
ZKHQ HB'HSDVVHPHQW
begin
RAISE_APPLICATION_ERROR(-20001, '
La masse salariale a explos ! );
end;
when no_data_found
begin
notifieErreur2 (num); -- Jamais atteint
end;
when others then null;
end;
84
Curseurs
Dclaration
Usage
Ouverture
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
OPEN QRPFXU!;
Fermeture
CLOSE QRPFXU!;
85
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple de Curseur
CREATE OR REPLACE PROCEDURE augmentationSalaire(
seuil
INEmploye.salary%TYPE,
augmentation
IN NUMBER(2)
) AS
sal Employe.salary%TYPE;
num Employe.numemp%TYPE;
&85625F,66(/(&7 VDODU\ QXPHPS )520 (PSOR\H;
BEGIN
23(1F;
)(7&+F,172VDO QXP;
DWWHQWLRQjORUGUHW\SHVFRPSDWLEOHV
WHILE F)281' LOOP
IF sal IS NOT NULL AND sal < seuil THEN
UDPATE Employe SET salary = salary*(augmentation + 100.0)/100
WHERE numemp = num;
END IF;
)(7&+F,172VDO QXP;
END LOOP;
&/26(F
END;
86
Procdures et Fonctions
Plusieurs Types
HQYR\pSDUOHFOLHQWDXVHUYHXU
Procdure externe
crit en LG3, utilise l API d Oracle
OCI : 2UDFOH&DOO,QWHUIDFH
Fonctionnalits gnrales
Rcursion illimite
Surcharge des paramtres
Passage des paramtres avec des modes IN, OUT, INOUT
87
Procdures Stockes
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Dclaration
QRPDUJ PRGHW\SH
PRGH : IN, OUT ou INOUT
W\SH : de base (SQL92), NUMBER, ADT (SQL3)
dsignation du type d une colonne d un table
WDEOH!FRORQQH!7<3(
AS
88
Procdures Stockes
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple
89
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Fonctions
create or replace function get_sal (numin Employe.numemp%TYPE)
return Employe.salary%TYPE is
s Employe.salary%TYPE;
--variable locale
begin
begin
select salary into s from Employe where numemp = num;
exception
when no_data_found
begin
s := -1; notifierErreur (num); -- Appel d une autre procdure
end;
when others then null;
end; -- bloc imbriqu
return s;
end; -- function
90
Informix SPL
SPL (Stored Procedure Language)
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
91
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
92
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
93
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
96
JDBC
API bas-niveau
/ impedance mismatch
SQLJ
Embedded SQL in Java
/ impedance mismatch
JavaBlend
JDO
97
JavaBlend
OML Java de l ODMG2.0 (www.odmg.org)
classes additionnelles
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
PersistentRoot et OID
Dcollection , ...
Transparence au SQL
Surcouche JDBC
98
Drferenciation par .
Architecture de base
PersistenceManager
Gre les accs, la sauvegarde, les transactions et les recherches entre les
applications et les Data Stores
Transaction
Query
Recherche sur critre.
classes PersistenceCapable
Interface que doit implmenter une classe dont des instances peuvent tre
persistentes
99
JDO - Query
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Exemple
class Employee {
String name;
Integer salary;
Employee manager;
}
...
Collection extent = persistMngr.getExtent(Class.forName("Employee"), false);
Query q = persistMngr.newQuery (
Class.forName ("Employee"), // class
extent,
// candidates
"salary > 50000"
// filter
);
Collection resultSet = q.execute();
100
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
101
Bibliographie - Autre
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
PL/SQL
Scott Urman , Oracle8 PL/SQL Programming , ed Osborne-McGrawHill, Oracle Press Series, ISBN 0-07-882305-6.
Steven Feuerstein, Oracle PL/SQL Programming ,2nd Edition, ed
O'
Reilly. ISBN 1-56592-335-9.
Steven Feuerstein, Advanced Oracle PL/SQL Programming with
Packages , ed O'
Reilly, ISBN 1-56592-238-7.
http://technet.oracle.com
ADO
102
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
Motivations
103
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
104
Cration de procdures
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
105
Bibliographie
JDBC
S. White, M. Fisher, R. Cattell, G. Hamilton, M. Hapner, "JDBC API
Tutorial and Reference", Ed Addison-Wesley, ISBN 0-201-63459-7
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
106
Bibliographie
SQLJ
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/
107
Bibliographie
Revues
DBMS Magazine www.dbmsmag.com
DB2 Magazine www.ibm.com
Oracle On-line Magazine www.oramag.com
'LGLHU'RQVH]3URJUDPPDWLRQ3URFpGXUDOHHW64/