27
JDBC JDBC JDBC JDBC Java DataBase Connectivity © Philippe GENOUD UJF 1 © Philippe GENOUD UJF 1 30/01/2013 JDBC JDBC Machine Virtuelle Java Introduction Introduction JDBC Java Data Base Connectivity API java standard qui permet un accès homogène à des bases de données depuis un programme Java au travers du langage SQL. Programme Java API JDBC © Philippe GENOUD UJF 2 30/01/2013 Serveur Oracle Serveur MySQL Serveur PostgreSQL L'API JDBC est indépendante des SGBD. Un changement de SGBD ne doit pas impacter le code applicatif. http://docs.oracle.com/javase/6/docs/technotes/guides/jdbc/

Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

  • Upload
    dinhque

  • View
    235

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

JDBC

JDBC

Ja

va

Da

taB

ase

Co

nn

ectiv

ity

© P

hilip

pe G

EN

OU

DU

JF

Philip

pe G

EN

OU

DU

JF

130/0

1/2

013

Ja

va

Da

taB

ase

Co

nn

ectiv

ity

JDBC

JDBC

Mach

ine

Virtu

elle

Jav

a Intro

ductio

nIn

troductio

n

�J

DB

C J

ava

Da

ta B

as

e C

on

ne

ctiv

ity

�A

PI ja

va

sta

nd

ard

qu

i pe

rme

t un

accè

s h

om

og

èn

e à

de

s b

ase

s d

e

do

nn

ée

s d

ep

uis

un

pro

gra

mm

e J

ava

au

trave

rs d

u la

ng

ag

e S

QL

.

Pro

gra

mm

e J

ava

AP

I JD

BC

© P

hilip

pe G

EN

OU

DU

JF

230/0

1/2

013

Serv

eu

rO

racle

Serv

eu

r M

yS

QL

Serv

eu

r P

ostg

reS

QL

�L

'AP

I JD

BC

est in

pe

nd

an

ted

es S

GB

D.

�U

n c

hangem

ent d

e S

GB

D n

e d

oit p

as im

pacte

r le c

ode a

pplic

atif.

http

://do

cs.o

racle

.co

m/ja

vase/6

/do

cs/te

ch

no

tes/g

uid

es/jd

bc/

Page 2: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

inte

rfaces d

e l'A

PI J

DBC

inte

rfaces d

e l'A

PI J

DBC

�L

'AP

I JD

BC

finit u

n e

nse

mb

le d

'inte

rface

s (p

acka

ge

java.sql

)

qu

i dé

finis

se

nt u

n p

roto

co

le d

e c

om

mu

nic

atio

n e

ntre

le p

rog

ram

me

java

clie

nt e

t le s

erv

eu

r de

ba

se

de

do

nn

ée

s p

ou

r

�o

uve

rture

/ferm

etu

re d

e c

on

ne

xio

ns à

un

e b

ase

de

do

nn

ée

s

�e

cu

tion

de

req

tes S

QL

�e

xp

loita

tion

de

s ré

su

ltats

–co

rresp

on

da

nce

typ

es S

QL

-typ

es J

AV

A

�a

ccè

s a

u m

éta

-mo

le

© P

hilip

pe G

EN

OU

DU

JF

330/0

1/2

013

�a

ccè

s a

u m

éta

-mo

le–

de

scrip

tion

de

s o

bje

ts d

u S

GB

D

principales interfaces de j

ava.sql

Driv

er

Sta

tem

en

t

Pre

pare

dS

tate

men

t

Calla

ble

Sta

tem

en

t

Co

nn

ectio

nR

esu

ltSet

Resu

ltSetM

eta

Data

Data

baseM

eta

Data

Co

nn

exio

n e

t au

then

tificatio

n

au

prè

s d

u S

GB

D

Req

uète

s S

QL

Résu

ltats

des

req

uête

s

JDBC

JDBC

Pilo

tes J

DBC

Pilo

tes J

DBC

�Le c

ode a

pplic

atif e

st b

asé s

ur le

s in

terfa

ces d

u J

DB

C

�P

ou

r accé

de

r à u

n S

GB

D il e

st n

éce

ssa

ire d

e d

ipo

se

r de

cla

sse

s

imp

lém

en

tan

tce

s in

terfa

ce

s.

�E

lles d

ép

en

de

nt

du

SG

BD

ad

ressé

.

�L

'en

se

mb

le d

e c

es c

lasse

s p

ou

r un

SG

BD

do

nn

é e

st a

pp

elé

pilo

te (d

rive

r) JD

BC

© P

hilip

pe G

EN

OU

DU

JF

430/0

1/2

013

Serv

eu

rO

racle

Serv

eu

r M

yS

QL

Serv

eu

r P

ostg

reS

QL

•Il ex

iste des pilotes

pour tous les SGBD im

portants du m

arché (O

racle, MyS

QL, PostgreS

QL, D

B2, …

)

•JDBC spécifie uniquem

ent l’API que ces pilotes

doivent respecter. Ils sont réalisés par une tierce

partie (fournisseur d

u SGBD, «

éditeur d

e logiciel…)

•l’im

plémentation d

es drivers est totalem

ent libre

Pro

gra

mm

e J

ava

AP

I JD

BC

Pro

gra

mm

e J

ava

AP

I JD

BC

Serv

eu

rO

racle

Serv

eu

r P

ostg

reS

QL

Page 3: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Pilo

tes J

DBC

Pilo

tes J

DBC

inte

rfaces

Driv

er

Sta

tem

en

t

Pre

pare

dS

tate

men

t

Calla

ble

Sta

tem

en

t

Co

nn

ectio

nR

esu

ltSet

Resu

ltSetM

eta

Data

Data

baseM

eta

Data

Co

nn

exio

n e

t au

then

tifica

tion

au

prè

s d

u S

GB

D

Req

uète

s S

QL

Résu

ltats

des

req

uète

s

Les in

terfa

ces d

éfin

issent u

ne

ab

stra

ctio

ndu p

ilote

(driv

er) d

e la

base d

e d

onnées.

Chaque fo

urn

isseur p

ropose s

a

pro

pre

imp

lém

en

tatio

n d

e c

es

inte

rfaces.

Driv

er O

racle

8i

Driv

er M

yS

ql

© P

hilip

pe G

EN

OU

DU

JF

530/0

1/2

013

Au n

iveau d

u p

rogra

mm

e

d’a

pplic

atio

n o

n n

e tra

vaille

qu

’avec

les a

bstra

ctio

ns

(inte

rfaces) s

ans c

e

soucie

r des c

lasses e

ffectiv

es

d’im

plé

menta

tion

Les c

lasses d

’implé

menta

tion d

u

driv

er jd

bc s

ont d

ans u

ne a

rchiv

e

(fichie

r jar o

u z

ip) q

u’il fa

ut in

tégre

r (s

ans la

décom

pre

sser) a

u n

iveau d

u

classpath

de l’a

pplic

atio

n a

u

mom

ent d

e l’e

xécutio

n

inte

rfaces.

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�il e

xis

te 4

typ

es d

e p

ilote

s J

DB

C

�ty

pe

1 : p

on

t JD

BC

–O

DB

C

�ty

pe

2 : p

ilote

qu

i fait a

pp

el à

de

s fo

nctio

ns n

ativ

es (c

od

e

no

n J

ava

, le p

lus s

ou

ve

nt e

n C

ou

C+

+) d

e l'A

PI d

u S

GB

D

© P

hilip

pe G

EN

OU

DU

JF

630/0

1/2

013

no

n J

ava

, le p

lus s

ou

ve

nt e

n C

ou

C+

+) d

e l'A

PI d

u S

GB

D

�ty

pe

3 : p

ilote

qu

i pe

rme

t l'utilis

atio

n d

'un

se

rve

ur m

idd

lew

are

�ty

pe

4 : p

ilote

en

tièe

me

nt e

n J

ava

qu

i utilis

e d

irecte

me

nt le

p

roto

co

le ré

se

au

du

SG

BD

Page 4: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�Lis

te d

es d

rivers

dis

ponib

les à

:http://java.sun.com/products/jdbc/jdbc.drivers.html

�séle

ctio

n d

’un

driv

er :

�choix

entre

vite

sse, fia

bilité

et p

orta

bilité

.

© P

hilip

pe G

EN

OU

DU

JF

730/0

1/2

013

�P

rogra

mm

e «

sta

ndalo

ne

», a

vec u

ne in

terfa

ce g

raphiq

ue q

ui

s’e

xécute

toujo

urs

sur u

n s

ystè

me W

indow

s p

eut tire

r bénéfic

e d

e

perfo

rmances d

’un d

river ty

pe 2

(driv

er c

ode-n

atif).

�U

ne a

pple

t peut n

écessite

r un d

river d

e ty

pe 3

(pour p

asser u

n

firew

all).

�U

ne s

erv

let d

éplo

yée s

ur d

e m

ultip

les p

late

form

es p

eut n

écessite

r la

souple

sse o

fferte

par d

es d

rivers

de ty

pe 4

.

�...

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�4 c

até

gorie

s d

e d

rivers

JD

BC

�ty

pe 1

: Pont J

DB

C-O

DB

C (O

pen D

ata

Base C

onnectiv

ity)

Ap

plic

atio

n J

ava

JD

BC

(java.s

ql) D

riverM

an

ag

er

imp

ose c

harg

em

en

t dan

s la

mém

oire

viv

e d

e la

Driv

er ty

pe 1

(JD

BC

/OD

BC

Brid

ge

)

Driv

er m

an

ag

er

OD

BC

Driv

er O

DB

C

OD

BC

inte

rface d

’accès (C

) au

x S

GB

D d

éfin

ie p

ar

Mic

roso

ft •

sta

nd

ard

de fa

it, très g

ran

d n

om

bre

de S

GB

D

accessib

les

© P

hilip

pe G

EN

OU

DU

JF

830/0

1/2

013

Inte

rface s

erv

eu

r S

GB

D

pla

tefo

rme d

’exécu

tion

de lib

rairie

s d

yn

am

iqu

es

Driv

er O

DB

C

Inte

rface c

lien

t SG

BD

co

de

bin

aire

OD

BC

su

r le c

lien

t•

alo

urd

it pro

ce

ss

us

d’in

sta

llatio

n e

t de

ma

inte

na

nc

e•

pro

blè

me

de

cu

rité p

ou

r les

ap

ple

ts•

ap

ple

ts «

un

trus

ted

» n

’on

t pa

s l

’au

toris

atio

n d

e c

ha

rge

r e

n m

ém

oire

du

co

de

na

tif

Page 5: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�T

ype 2

: AP

I nativ

e

Ap

plic

atio

n J

ava

JD

BC

(java.s

ql) D

riverM

an

ag

er

imp

ose c

harg

em

en

t dan

s la

mém

oire

viv

e d

e la

p

late

form

e d

’exécu

tion

de lib

rairie

s d

yn

am

iqu

es

Driv

er ty

pe 2

inte

rface d

’accès e

ntre

le d

river m

an

ag

er

JD

BC

et l

’inte

rface c

lien

te d

u S

GB

D

Inte

rface c

lien

t SG

BD

© P

hilip

pe G

EN

OU

DU

JF

930/0

1/2

013

Inte

rface s

erv

eu

r S

GB

D

pla

tefo

rme d

’exécu

tion

de lib

rairie

s d

yn

am

iqu

es

(co

de

bin

aire

de

l’in

terfa

ce

clie

nt s

cifiq

ue

au

SG

BD

p

ar e

xe

mp

le lib

rairie

s O

CI, O

racle

Ca

ll Inte

rface

, co

nçu

es

initia

lem

ent p

ou

r pro

gra

mm

eu

rs C

/C+

+)

Driv

er d

éd

ié à

un

SG

BD

pa

rticu

lier

•m

oin

s o

uve

rt qu

e p

on

t JD

BC

/OD

BC

•p

ote

ntie

llem

en

t plu

s p

erfo

rma

nt (m

oin

s d

e c

ou

ch

es

log

icie

lles

)

me

s p

rob

lèm

es

qu

’ave

c p

on

t JD

BC

-OD

BC

•c

od

e n

atif s

ur p

late

form

e d

’ex

éc

utio

n

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�T

ype 3

: JD

BC

-Net

Ap

plic

atio

n J

ava

JD

BC

(java.s

ql) D

riverM

an

ag

er

Driv

er ty

pe 3

trad

uit a

pp

els

JD

BC

su

ivan

t un

pro

toco

le ré

seau

à v

ocatio

n u

niv

ers

elle

ind

ép

en

dan

t des

fou

rnis

seu

rs d

e S

GB

D (S

ql*n

et, N

ET

8)

req

uête

s ré

seau

do

iven

t être

en

su

ite tra

du

ites p

ar

un

serv

eu

r déd

ié a

ux re

qu

ête

s s

pécifiq

ues à

un

S

GB

D (p

ar e

xem

ple

WebLogic

de B

EA

)In

terfa

ce c

lien

t SG

BD

Inte

rface s

erv

eu

r mid

dle

ware

© P

hilip

pe G

EN

OU

DU

JF

10

30/0

1/2

013

Inte

rface s

erv

eu

r S

GB

D

driv

ers

100%

Java

pe

uve

nt ê

tre u

tilisé

s d

ep

uis

un

e a

pp

let (le

s d

rive

rs n

e s

on

t plu

s

du

co

de

na

tif et p

eu

ve

nt ê

tre c

ha

rgé

s c

om

me

n’im

po

rte q

ue

l c

om

po

sa

nt J

ava

)

SG

BD

(par e

xem

ple

WebLogic

de B

EA

)

si l

’ap

plic

atio

n e

st u

ne a

pp

let, le

mo

dèle

cla

ssiq

ue d

e

sécu

ritép

eu

t po

ser d

es p

rob

lèm

e d

e c

on

nexio

n ré

seau

•u

ne

ap

ple

t «u

ntru

ste

ne

pe

ut o

uvrir u

ne

co

nn

ex

ion

qu

’ave

c la

m

ac

hin

e s

ur la

qu

elle

elle

es

t hé

be

rgé

e•

il su

ffit d’in

sta

ller le

se

rve

ur W

eb

et le

se

rve

ur m

idd

lew

are

su

r la

me

pla

tefo

rme

. Po

ss

ibilité

d’a

cc

éd

er a

lors

à u

n S

GB

D s

itué

n

’imp

orte

su

r le ré

se

au

.

mid

dle

ware

Page 6: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Driv

ers

JDBC

Driv

ers

JDBC

�T

ype 4

: Thin

(pro

tocole

natif)

Ap

plic

atio

n J

ava

JD

BC

(java.s

ql) D

riverM

an

ag

er

Driv

er ty

pe 4

le d

river in

tera

git d

irecte

men

t avec le

g

estio

nn

aire

du

SG

BD

utilis

e d

irec

tem

en

t pro

toc

ole

rés

ea

u d

u S

GB

D

(sp

éc

ifiqu

e à

un

fou

rnis

se

ur d

e S

GB

D)

© P

hilip

pe G

EN

OU

DU

JF

11

30/0

1/2

013

Inte

rface s

erv

eu

r S

GB

D

Driv

er 1

00%

Java (c

on

nexio

n v

ia s

ockets

Jav

a)

So

lutio

n la

plu

s la

plu

s é

lég

an

te e

t la p

lus s

ou

ple

si l

’ap

plic

atio

n e

st u

ne a

pp

let, le

mo

dèle

cla

ssiq

ue d

e s

écu

ritéd

es a

pp

lets

imp

ose q

ue le

S

GB

D s

oit h

éb

erg

é s

ur le

serv

eu

r Web

Du

ran

t le p

roje

t le d

river u

tilisé p

ou

r accéd

er à

Ora

cle

sera

de c

e ty

pe

JDBC

JDBC

vers

ions d

e J

DBC

vers

ions d

e J

DBC

�D

iffére

nte

s v

ers

ion

s

�JD

BC

1.0

Co

re A

PI (J

DK

1.1

) : pa

cka

ge

java.sql

�su

pp

orte

le s

tan

da

rd S

QL

-2 e

ntry

leve

l

�JD

BC

2.0

(Ja

va

2 J

DK

1.2

) : pa

cka

ge

s java.sql javax.sql

�su

pp

ort d

e c

erta

ine

s fo

nctio

nn

alité

de

SQ

L-3

© P

hilip

pe G

EN

OU

DU

JF

12

30/0

1/2

013

�JD

BC

3.0

(JD

K 1

.4) : p

acka

ge

s java.sql javax.sql

javax.sql.rowset

�su

pp

ort d

'au

tres fo

nctio

nn

alité

s d

e S

QL

-3

�n

ou

ve

au

su

pp

ort p

ou

r la g

estio

n d

es R

esu

ltSe

t

�JD

BC

4.0

(JD

K 1

.6)

�fa

cilité

d'é

critu

re a

u tra

ve

rs d

'an

no

tatio

ns

Page 7: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Cla

sses e

t inte

rfaces d

e J

DBC

Cla

sses e

t inte

rfaces d

e J

DBC

principales inte

rface

sde ja

va.sql

Driv

er

Sta

tem

en

t

Pre

pare

dS

tate

men

t

Calla

ble

Sta

tem

en

t

Co

nn

ectio

nR

esu

ltSet

Resu

ltSetM

eta

Data

Data

baseM

eta

Data

Co

nn

exio

n e

t au

then

tificatio

n

au

prè

s d

u S

GB

D

Req

uète

s S

QL

Résu

ltats

des

req

uête

s

© P

hilip

pe G

EN

OU

DU

JF

13

30/0

1/2

013

principales cla

sses d

e ja

va.sql

Java.la

ng

.Ob

ject

Java.u

til.Date

Th

row

ab

le

Excep

tion

Driv

erM

an

ag

er

Driv

erP

rop

erty

Info

Typ

es

Date

Tim

eT

imeS

tam

p

SQ

LE

xcep

tion

Batc

hU

pd

ate

Excep

tion

SQ

LW

arn

ing

Data

Tru

ncatio

n

Ch

arg

e e

t co

nfig

ure

le

driv

er c

lien

t du

SG

BD

JDBC

JDBC

Ap

plic

atio

n J

ava

Mach

ine V

irtuelle

Jav

a

Driv

er M

anager

Driv

er M

anager

Driv

erM

an

ag

er

Driv

er J

DB

Cfo

urn

isseu

r 1

�D

riverM

anager : c

lasse ja

va à

laquelle

s’a

dre

sse le

code d

e l’a

pplic

atio

n

clie

nte

.

Driv

er J

DB

Cfo

urn

isseu

r 2

AP

I JD

BC

java

.sq

lL

e d

river m

an

ag

er

perm

et d

e c

harg

er e

tco

nfig

ure

r les p

ilote

s

JD

BC

nécessaire

s à

l'a

pp

licatio

n

© P

hilip

pe G

EN

OU

DU

JF

14

30/0

1/2

013

SG

BD

fou

rnis

seu

r 1S

GB

Dfo

urn

isseu

r 2

fou

rnis

seu

r 1fo

urn

isseu

r 2l'a

pp

licatio

n

Page 8: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Cla

sses e

t inte

rfaces d

e J

DBC

Cla

sses e

t inte

rfaces d

e J

DBC

Driv

erM

an

ag

er

Co

nn

ectio

nC

on

nectio

nC

on

nectio

n

�O

bje

ts in

sta

ncié

s à

partir d

es ty

pes J

ava d

éfin

is d

ans java.sql

DriverManager

perm

et d

e c

réer

des o

bje

ts Connection

© P

hilip

pe G

EN

OU

DU

JF

15

30/0

1/2

013

Sta

tem

en

tP

rep

are

dS

tate

men

tC

alla

ble

Sta

tem

en

t

Resu

ltSet

Resu

ltSet

Resu

ltSet

Un

ob

jetConnection

perm

et d

e c

réer

des o

bje

ts e

ncap

su

lan

t des re

qu

ête

s S

QL

Les o

bje

ts e

ncap

su

lan

t les re

qu

ête

s

SQ

L p

erm

ette

nt d

e c

réer d

es o

bje

ts

ResultSet

en

cap

su

lan

t le ré

su

ltat

d’u

ne re

qu

ête

JDBC

JDBC

1) C

harg

em

ent d

u d

river

1) C

harg

em

ent d

u d

river

�A

vant d

e p

ouvoir ê

tre u

tilisé, le

driv

er d

oit ê

tre e

nre

gis

tré a

uprè

s d

u

DriverManager

de jd

bc.

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

�M

ais

si o

n re

gard

e m

ieux la

doc d

e J

DB

C...

�Il e

st d

onc p

réfé

rable

d’e

xplo

iter le

s p

ossib

ilités d

e c

harg

em

ent d

ynam

ique d

e

cla

sses d

e J

AV

A

Wh

en a D

river class is lo

aded

, it sho

uld

create an in

stance o

f itself and

register it w

ith th

e Driv

erMan

ager.

© P

hilip

pe G

EN

OU

DU

JF

16

30/0

1/2

013

cla

sses d

e J

AV

A

�U

tiliser la

méth

ode forName

de la

cla

sse Class

avec e

n p

ara

mètre

le n

om

com

ple

t de la

cla

sse d

u d

river.

try {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Class.forName("oracle.jdbc.OracleDriver");

}catch (ClassNotFoundException e) {

...

}

�P

erm

et d

e p

ara

métre

r le d

river s

ans m

odifie

r l’applic

atio

n (p

ar e

xem

ple

nom

du d

river s

tocké d

ans u

n fic

hie

r de c

onfig

ura

tion (p

rop

ertie

s file

))

Ch

arg

em

en

t d'u

n p

ilote

OB

DC

Ch

arg

em

en

t d'u

n p

ilote

Ora

cle

.newInstance();

Page 9: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

2) C

onnexio

n à

la b

ase

2) C

onnexio

n à

la b

ase

�O

uve

rture

de

la c

on

ne

xio

n :

Connectionconn = DriverManager.getConnection(url,

user, password);

Connectionconn = DriverManager.getConnection(url,

user, password);

�Id

en

tifica

tion

de

la B

D v

ia u

n U

RL (U

nifo

rm R

esso

urc

e L

oca

tor)

de

la fo

rme

rale

identific

atio

n

de la

base

base

le d

river o

u le

type

du S

GB

DR

driver:

l'utilis

atio

n

de J

DB

C

jdbc:

© P

hilip

pe G

EN

OU

DU

JF

17

30/0

1/2

013

oracle:thin:

jdbc:

@serveur:

nom

IP d

userv

eur

�E

xe

mp

le :

Connection

conn

= DriverManager.getConnection(

"jdbc:oracle:thin:@im2ag-oracle.e.ujf-grenoble.fr:1521:ufrima",

user, password);

Connection

conn

= DriverManager.getConnection(

"jdbc:oracle:thin:@im2ag-oracle.e.ujf-grenoble.fr:1521:ufrima",

user, password);

de la

base

du S

GB

DR

de J

DB

C

La fo

rme e

xacte

dépend d

e la

BD

, chaque B

D n

écessita

nt d

es in

form

atio

ns s

pécifiq

ues

pour é

tablir la

connexio

n. P

ar e

xem

ple

pour le

driv

er O

racle

JD

BC

-Thin

:

:base

nom

de la

base

num

éro

de p

ort

socket à

utilis

er

port

JDBC

JDBC

Exem

ple

s d

e c

onnexio

ns

Exem

ple

s d

e c

onnexio

ns

�T

rouver u

n d

river J

DB

C :

�sur le

s s

ites d

es fo

urn

isseurs

de B

D

�Lis

te d

es d

rivers

dis

ponib

les à

:http://www.oracle.com/technetwork/java/index-136695.html

Class.forName("oracle.jdbc.OracleDriver");

Connectionconnect= DriverManager.getConnection(

"jdbc:oracle:thin:@im2ag-oracle.e.ujf-grenoble.fr:1521:ufrima",

user, password);

Ora

cle

11g

su

r im2ag-oracle.e.ujf-grenoble.fr

:

ojd

bc6.ja

r

Quand getConnection

est in

voquée le

DriverManager

inte

rroge c

haque d

river e

nre

gis

tré, s

i un d

river re

connaît

l’url il c

rée e

t reto

urn

e u

n o

bje

t Connection

.try{

© P

hilip

pe G

EN

OU

DU

JF

18

30/0

1/2

013

user, password);

... // utilisation connexion pour accéder à la base

try{

Class.forName("com.mysql.jdbc.Driver");

Connectionconnect= DriverManager.getConnection(

"jdbc:mysql://localhost/test",

user, password);

...

}catch (ClassNotFoundExceptione) {

...

}catch (SQLExceptione) {

...

}

un

e b

ase M

yS

QL

4.1

locale

:

mysq

l-co

nn

ecto

r-java-3

.1.6

-bin

.jar

catch (SQLExceptionsqle) {

...

} }catch (ClassNotFoundExceptione) {

...

}

Page 10: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Connexio

ns

Connexio

ns

�U

ne a

pplic

atio

n p

eut m

ain

tenir d

es c

onnexio

ns m

ultip

les

�le

nom

bre

limite

de c

onnexio

ns e

st fix

é p

ar le

SG

BD

lui m

êm

e (d

e q

uelq

ues

diza

ines à

des m

illiers

).

�Q

uand u

ne Connection

n’a

plu

s d

’utilité

pre

ndre

soin

de la

ferm

er e

xp

licite

men

t.

�Lib

éra

tion d

e m

ém

oire

et s

urto

ut d

es re

ssourc

es d

e la

base d

e d

onnées

déte

nues p

ar la

connexio

n

try {

Connection conn = DriverManager.getConnection("jdbc:odbc:companydb",

© P

hilip

pe G

EN

OU

DU

JF

19

30/0

1/2

013

Connection conn = DriverManager.getConnection("jdbc:odbc:companydb",

user, passwd);

...

// utilisation de la connexion pour dialoguer avec la BD

...

// fermeture de la connexion

conn.close();

}catch (SQLException e) {

...

}

Erre

ur S

QL

lors

du

dia

logue

avec la

BD

L'in

stru

ctio

n close

n'e

st p

as

ex

éc

uté

e.

La

co

nn

ex

ion

res

te o

uve

rte !

Co

mm

en

t gara

ntir la

ferm

etu

re d

es c

on

nexio

ns ?

JDBC

JDBC

Ferm

etu

re d

'une c

onnexio

nFerm

etu

re d

'une c

onnexio

n

�P

our g

ara

ntir fe

rmetu

re d

e la

connexio

n : U

tilisatio

n d

'une c

lause finally

try {

Connection conn = DriverManager.getConnection("jdbc:odbc:companydb",

user, passwd);

...

// utilisation de la connexion pour dialoguer avec la BD

...

// fermeture de la connexion

conn = DriverManager.getConnection("jdbc:odbc:companydb",

Connection conn; = null;

Po

ur q

ueconn

so

it co

nn

ue

da

ns

le b

loc

finally

Le

co

mp

ilate

ur im

po

se

d'in

itialis

erconn

© P

hilip

pe G

EN

OU

DU

JF

20

30/0

1/2

013

finally {

conn.close();

}

// fermeture de la connexion

conn.close();

}catch (SQLException e) {

...

}

conn

ne

pe

ut ê

tre ré

so

lu

close

pe

ut p

rovo

qu

er u

ne

SQ

LE

xc

ep

tion

try {

}catch (SQLException e){

e.printStackTrace();

}

conn

pe

ut n

e p

as

avo

ir été

initia

lisé

e

if (conn != null)

Page 11: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Ferm

etu

re d

'une c

onnexio

nFerm

etu

re d

'une c

onnexio

n

�P

our g

ara

ntir fe

rmetu

re d

e la

connexio

n : u

tilisatio

n d

'un try

avec re

ssourc

es

(Java7) a

u lie

u d

e la

cla

use finally

try

{

conn= DriverManager.getConnection("jdbc:odbc:companydb",

user, passwd);

...

// utilisation de la connexion pour dialoguer avec la BD

...

}catch (SQLException

e) {

...

Connection conn = null;

© P

hilip

pe G

EN

OU

DU

JF

21

30/0

1/2

013

...

}finally{

try

{

if (conn

!= null)

conn.close();

}catch (SQLExceptione){

e.printStackTrace();

}

}

try

( Connection

conn

=

DriverManager.getConnection("jdbc:odbc:companydb",

user, passwd) ) {

...

// utilisation de la connexion pour dialoguer avec la BD

...

}catch (SQLException

e) {

...

}

Les re

sso

urc

es

so

nt

au

tom

atiq

uem

en

tfe

rmées

à la

fin d

e l'in

stru

ctio

ntry

JDBC

JDBC

3) P

répare

r/exécute

r une re

quête

3) P

répare

r/exécute

r une re

quête

�U

ne

fois

un

e Connection

cré

ée

on

pe

ut l’u

tilise

r po

ur c

rée

r et e

cu

ter

de

s re

qu

ête

s (s

tate

me

nts

) SQ

L.

�3

typ

es

(inte

rfac

es) d

'ob

jets

sta

tem

ent

:

�Statement

: req

tes s

imp

les (S

QL

sta

tiqu

e)

�PreparedStatement

: req

tes p

réco

mp

ilée

s (S

QL

dyn

am

iqu

e s

i

su

pp

orté

pa

r SG

BD

) qu

i pe

uve

nt a

liore

r les p

erfo

rma

nce

s

Sta

tem

en

t

Pre

pare

dS

tate

men

t

Calla

ble

Sta

tem

en

t

© P

hilip

pe G

EN

OU

DU

JF

22

30/0

1/2

013

�CallableStatement

: en

ca

psu

le p

rocé

du

res S

QL

sto

cké

es d

an

s le

SG

BD

�3

form

es

(mé

tho

de

s) d

'ex

éc

utio

ns

:

�executeQuery

: po

ur le

s re

qu

ête

s q

ui re

tou

rne

nt u

n ré

su

ltat (SELECT

)

�ré

su

ltat a

cce

ssib

le a

u tra

ve

rs d

’un

ob

jetResultSet

�executeUpdate

: po

ur le

s re

qu

ête

s q

ui n

e re

tou

rne

nt p

as d

e ré

su

ltat

(INSERT, U

PDATE, D

ELETE, C

REATE TABLE

et D

ROP TABLE

)

�execute

: qu

an

d o

n n

e s

ait p

as s

i la re

qu

ête

reto

urn

e o

u n

on

un

su

ltat, p

rocé

du

res s

tocké

es

Page 12: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Pré

pare

r / exécute

r une

requête

sim

ple

Pré

pare

r / exécute

r une

requête

sim

ple

String myQuery = "SELECT prenom, nom, email "

+

�C

réa

tion

d'u

n s

tate

me

nt:

Statement stmt = conn.createStatement();

�E

cu

tion

de

la re

qu

ête

:

© P

hilip

pe G

EN

OU

DU

JF

23

30/0

1/2

013

String myQuery = "SELECT prenom, nom, email "

+

"FROM employe "

+

"WHERE (nom='Dupont') AND (email IS NOT NULL) "

+

"ORDER BY nom";

ResultSet rs = stmt.executeQuery(myQuery);

�executeQuery(String q)

renvoie

un o

bje

t de ty

pe ResultSet

�perm

et d

e d

écrire

la ta

ble

des ré

sulta

ts

JDBC

JDBC

Lectu

re d

es ré

sulta

tsLectu

re d

es ré

sulta

ts

�executeQuery()

renvoie

un o

bje

t de c

lasse ResultSet

�perm

et d

e d

écrire

la ta

ble

des ré

sulta

ts

java.sql.Statement stmt = conn.createStatement();

ResultSetrs= stmt.executeQuery("SELECT nom, code_client FROM Clients");

Nom

Prénom

Code_client

Adresse

DUPONT

Jean

12345

135 rue du Lac

DUROND

Louise

12545

13 avenue de la Mer

...

...

Nom

Code_client

DUPONT

12345

DUROND

12545

...

...

© P

hilip

pe G

EN

OU

DU

JF

24

30/0

1/2

013

while (rs.next())

{

... Exploiter les données

}

�Les ra

ngées d

u ResultSet

se p

arc

oure

nt ité

rativ

em

ent lig

ne (ro

w)

par lig

ne

�boolean next()

perm

et d

’avancer à

la lig

ne s

uiv

ante

, �false

si p

as d

e

ligne s

uiv

ante

�P

lacé a

vant la

pre

miè

re lig

ne à

la c

réatio

n d

u ResultSet

...

ZORG

Albert

45677

8 Blvd De la Montagne

...

ZORG

45677

Page 13: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Lectu

re d

es ré

sulta

tsLectu

re d

es ré

sulta

ts

�Les c

olo

nnes s

ont ré

fére

ncées p

ar le

ur n

um

éro

ou p

ar le

ur n

om

�L'a

ccès a

ux v

ale

urs

des c

olo

nnes s

e fa

it par d

es m

éth

odes getXXX(String nomCol)

ou getXXX(int numCol)

où XXX

dépend d

u ty

pe d

e la

colo

nne d

ans la

table

SQ

L

�P

ou

r les trè

s g

ros ro

w, o

n p

eu

t utilis

er d

es s

trea

ms.

java.sql.Statement stmt = conn.createStatement();

ResultSetrs= stmt.executeQuery("SELECT a, b, c FROM Table1");

© P

hilip

pe G

EN

OU

DU

JF

25

30/0

1/2

013

ResultSetrs= stmt.executeQuery("SELECT a, b, c FROM Table1");

while (rs.next())

{

int i = rs.getInt("a"); // rs.getInt(1);

String s = rs.getString("b"); // rs.getString(2);

byte b[] = rs.getBytes("c"); // rs.getBytes(3);

System.out.println("ROW = " + i + " " + s + " " + b[0]);

}

Atte

ntio

n ! E

n S

QL

les

n

um

éro

s d

e c

olo

nn

es

d

éb

ute

nt à

1

JDBC

JDBC

Equiv

ale

nces d

es

types J

ava-S

QL

Equiv

ale

nces d

es

types J

ava-S

QL

�P

our c

haque m

éth

ode getXXX

le d

river J

DB

C d

oit e

ffectu

er u

ne c

onvers

ion

entre

le ty

pe d

e d

onnées d

e la

base d

e d

onnées e

t le ty

pe J

ava c

orre

spondant

getObject

peu

t reto

urn

er

getBigDecimal

getString

getString

DE

CIM

AL

VA

RC

HA

R

CH

AR

NU

ME

RIC

getBigDecimal

java.Math.BigDecimal

String

String

java.Math.BigDecimal

Typ

e S

QL

Méth

od

eTyp

e J

ava

Peu

t être

ap

pelé

e s

ur

n’im

po

rte q

uel ty

pe d

e v

ale

ur

© P

hilip

pe G

EN

OU

DU

JF

26

30/0

1/2

013

getObject

peu

t reto

urn

er

n’im

po

rte q

uel ty

pe d

e d

on

née

«p

ackag

é» d

an

s u

n o

bje

t java

(wra

pp

er o

bje

ct )

getInt

getFloat

getDouble

getBoolean

getDate

getTime

getTimestamp

getObject

INT

EG

ER

RE

AL

FL

OA

T

BIT

DA

TE

TIM

E

TIM

E S

TA

MP

DO

UB

LE

TIN

YIN

T

SM

AL

LIN

T

BIG

INT

getShort

getByte

getLong

getDouble

int

float

double

boolean

java.sql.Date

java.sql.Time

java.sql.Timestamp

short

byte

long

double

Si u

ne c

on

vers

ion

de d

on

nées

invalid

e e

st e

ffectu

ée (p

ar e

x

DA

TE

-> in

t), un

e SQLException

est la

ncée

Boolean

Integer

Integer

Integer

Long

Float

Double

Double

Page 14: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Tra

item

ent d

es v

ale

urs

nulle

sTra

item

ent d

es v

ale

urs

nulle

s

�Q

ue s

e p

asse-t-il s

i une m

éth

ode getXXX()

de R

esultS

et e

st a

ppliq

uée à

une

vale

ur N

ULL

SQ

L ?

PERSONNES

Vale

urs

nu

lles a

ccep

tées

© P

hilip

pe G

EN

OU

DU

JF

27

30/0

1/2

013

�C

onvers

ion a

uto

matiq

ue v

ers

une v

ale

ur "a

ccepta

ble

" selo

n le

type re

tourn

é p

ar

getXXX()

�null

si getXXX()

reto

urn

e u

n ty

pe o

bje

t (ex : g

etString(),getDate(),…

)

�0

si getXXX()

reto

urn

e u

n ty

pe n

um

ériq

ue (e

x : g

etInt(),getDouble(),…

)

�false

pour g

etBoolean()

ResultSet rs = stmt.executeQuery("SELECT * FROM PERSONNES");

...

... rs.getString("ADRESSE")

... rs.getDate("DATE_NAISS")

��� �?

JDBC

JDBC

Tra

item

ent d

es v

ale

urs

nulle

sTra

item

ent d

es v

ale

urs

nulle

s

�C

om

ment d

istin

guer v

ale

urs

NU

LL d

es a

utre

s ?

PERSONNES

while (rs.next()) {

System.out.print(rs.getString("NOM"));

System.out.print(" " + rs.getString("PRENOM") + " ");

System.out.println(rs.getBoolean("MARIE")?"Marié":"Non Marié");

}

ResultSet rs = stmt.executeQuery("SELECT NOM,PRENOM,MARIE FROM PERSONNES ORDER BY NOM");

TITI Fifi Marié

TOTO Riri

Non Marié

TUTU Mimi Non Marié

...

© P

hilip

pe G

EN

OU

DU

JF

28

30/0

1/2

013

}

while (rs.next()) {

System.out.print(rs.getString("NOM"));

System.out.print(" " + rs.getString("PRENOM") + " ");

boolean marié = rs.getBoolean("MARIE");

if (rs.wasNull())

System.out.println("?");

else

System.out.println(marié?"Marié":"Non Marié");

}

�M

éth

ode wasNull()

de ResultSet

�R

envoie

true

si o

n v

ient d

e lire

une v

ale

ur N

ULL, false

sin

on

...

TITI Fifi Marié

TOTO Riri ?

TUTU Mimi Non Marié

...

Page 15: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Pré

pare

r/exécute

r une

requête

sim

ple

Pré

pare

r/exécute

r une

requête

sim

ple

Statement stmt = conn.createStatement();

�U

n o

bje

t Statement

rep

rése

nte

un

e s

imp

le (s

eu

le) re

qu

ête

SQ

L.

�U

n a

ppel à

executeQuery()

, executeUpdate()

ou execute()

ferm

e

implic

item

ent to

ut ResultSet

actif a

ssocié

avec l’o

bje

t Statement

.

Statement stmt = conn.createStatement();

�A

vant d

’exécute

r une a

utre

requête

avec u

n o

bje

t Statement

il faut ê

tre

sûr d

’avoir e

xplo

ité le

s ré

sulta

ts d

e la

requête

pré

cédente

.

© P

hilip

pe G

EN

OU

DU

JF

29

30/0

1/2

013

Statement stmt = conn.createStatement();

ResultSet rs1 = stmt.executeQuery(myQuery1);

ResultSet rs2 = stmt.executeQuery(myQuery2);

//exploitation des résultats de myQuery1

while (rs1.next() {

...

}//exploitation des résultats de myQuery2

while (rs2.next() {

...

}

Statement stmt = conn.createStatement();

ResultSet rs1 = stmt.executeQuery(myQuery1);

//exploitation des résultats de myQuery1

while (rs1.next() {

...

}ResultSet rs2 = stmt.executeQuery(myQuery2);

//exploitation des résultats de myQuery2

while (rs2.next() {

...

}

�S

i applic

atio

n n

écessite

d’e

ffectu

er p

lus d

’une re

quête

sim

ulta

ném

ent,

nécessaire

de c

réer e

t utilis

er a

uta

nt d

'obje

ts Statement

.

JDBC

JDBC

Un e

xem

ple

«com

ple

Un e

xem

ple

«com

ple

import java.sql.*;

public class TestJDBC {

public static void main(String[] args) throws Exception {

Class.forName("postgres95.pgDriver");

Connection conn= DriverManager.getConnection("jdbc:pg95:mabase",

"dedieu", "");

Statement stmt= conn.createStatement();

© P

hilip

pe G

EN

OU

DU

JF

30

30/0

1/2

013

ResultSet rs= stmt.executeQuery("SELECT * from employe");

while (rs.next()) {

String nom = rs.getString("nom");

String prenom = rs.getString("prenom");

String email = rs.getString("email");

}rs.close();

stmt.close();

conn.close();

}

}

Page 16: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Pré

pare

r/exécute

r une

requête

pré

com

pilé

ePré

pare

r/exécute

r une

requête

pré

com

pilé

e�

Cré

atio

n d

'un

pre

pa

red

Sta

tem

en

t(re

qu

ête

SQ

L d

yn

am

iqu

e):

�p

ara

tres fo

rme

ls s

cifié

s à

l’a

ide

de

?

PreparedStatement ps = conn.prepareStatement(

"SELECT * FROM ? WHERE NAME = ? "

);

�P

assa

ge

de

s p

ara

tres e

ffectifs

�à

l’a

ide

de

tho

de

s a

u fo

rma

t se

tXX

X(in

dic

e,v

ale

ur) o

ù X

XX

rep

rése

nte

le ty

pe

du

pa

ram

ètre

s q

ue

l’o

bje

t es

t ins

tan

cié

, la

pro

du

re S

QL

es

t tran

sm

ise

au

S

GB

D q

ui la

pré

-co

mp

ile

© P

hilip

pe G

EN

OU

DU

JF

31

30/0

1/2

013

ps.setString(1, "Person" );

for (int i=0; i < names.length; i++) {

ps.setString(2, names[i]) ;

ResultSet rs = ps.executeQuery();

// ... Exploitation des résultats

}

�In

vo

ca

tion

et e

xp

loita

tion

de

s ré

su

ltats

�p

ha

se

ide

ntiq

ue

à c

elle

utilis

ée

po

ur S

QL s

tatiq

ue

JDBC

JDBC

Pro

cédure

s s

tockées

Pro

cédure

s s

tockées

�La p

lupart d

es S

GB

D in

clu

ent u

n la

ngage d

e p

rogra

mm

atio

n in

tern

e (e

x:

PL/S

QL d

’Ora

cle

) perm

etta

nt a

ux d

évelo

ppeurs

d’in

clu

re d

u c

ode p

rocédura

l

dans la

BD

, code p

ouvant ê

tre e

nsuite

invoqué d

epuis

d’a

utre

s a

pplic

atio

ns.

�le

code e

st é

crit u

ne s

eule

fois

est p

eut ê

tre u

tilisé p

ar d

iffére

nte

s

applic

atio

ns.

�perm

et d

e s

épare

r le c

ode d

es a

pplic

atio

ns d

e la

stru

ctu

re in

tern

e d

es

table

s. (c

as id

éal : e

n c

as d

e m

odific

atio

n d

e la

stru

ctu

re d

es ta

ble

s s

eul le

s

pro

cédure

s s

tockées o

nt b

esoin

d’ê

tre m

odifié

es)

© P

hilip

pe G

EN

OU

DU

JF

32

30/0

1/2

013

pro

cédure

s s

tockées o

nt b

esoin

d’ê

tre m

odifié

es)

�U

tilisatio

n d

es p

rocédure

s s

tockées d

epuis

JD

BC

via

inte

rface

CallableStatement

�S

ynta

xe u

nifié

e in

dépendante

de la

maniè

re d

ont c

elle

s-c

i sont g

éré

es p

ar

le S

GB

D (c

haque S

GB

D a

sa p

ropre

synta

xe)

�U

tilisatio

n p

ossib

le d

e la

vale

ur d

e re

tour

�G

estio

n d

es p

ara

mètre

s IN

, OU

T, IN

OU

T

Page 17: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Pro

cédure

s s

tockées

Pro

cédure

s s

tockées

CallableStatement proc = conn.callableStatement(

"{? = call maProcedure(?,?)}");

CallableStatement proc = conn. callableStatement(

"{call maProcedure(?,?)}");

Ap

pel a

vec v

ale

ur d

e re

tou

r et p

ara

mètre

s

Ap

pel s

an

s v

ale

ur d

e re

tou

r et a

vec p

ara

mètre

s

�P

répara

tion d

e l

’appel

�P

répara

tion d

es p

ara

mètre

s

proc.registerOUTParameter(2,Types.DECIMAL,3);

© P

hilip

pe G

EN

OU

DU

JF

33

30/0

1/2

013

No

mb

re d

e c

hiffre

s a

prè

s d

écim

ale

2èm

e p

ara

mètre

de ty

pe O

UT

�P

assage d

es p

ara

mètre

s IN

proc.setByte(1,25);

1er p

ara

mètre

(typ

e IN

)v

ale

ur

�A

ppel

ResultSet rs = proc.executeQuery();

�E

xplo

itatio

n d

u ResultSet

(idem

que p

our S

tatement

et PreparedStatement

)

�R

écupéra

tion d

es p

ara

mètre

s O

UT

java.Math.BigDecimal bigd = proc.getBigDecimal(2,3);

JDBC

JDBC

Accès a

ux m

éta

-données

Accès a

ux m

éta

-données

�P

erm

et d

e d

écouvrir d

ynam

iquem

ent (a

u m

om

ent d

e l’e

xécutio

n) d

es p

roprié

tés

concern

ant la

base d

e d

onnées o

u le

s ré

sulta

ts d

e re

quête

s

�E

xem

ple

: lors

de l’e

xécutio

n d

’une re

quête

non c

onnue à

l’avance.

execute

Update

??

execute

Query

??

Strin

g c

onte

nant u

ne

requête

quelc

onque

Accès a

u ResultSet

pro

duit p

ar la

requête

Renvoie

true

si re

quête

de ty

pe Query

false

sin

on (Update)

© P

hilip

pe G

EN

OU

DU

JF

34

30/0

1/2

013

cmd

stmt.execute(cmd)

pro

duit p

ar la

requête

if (stmt.execute(cmd)) {

ResultSet rs = stmt.getResultSet();

...

//Exploitation du ResultSet

...

rs.close();

}elseSystem.out.println("nombre de lignes modifiées " + stmt.getUpdateCount());

}

Besoin

d’a

ccès a

ux m

éta

-données d

u R

esultS

et

Page 18: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Accès a

ux m

éta

-données

Accès a

ux m

éta

-données

�P

erm

et d

e d

écouvrir d

ynam

iquem

ent (a

u m

om

ent d

e l’e

xécutio

n) d

es p

roprié

tés

concern

ant la

base d

e d

onnées o

u le

s ré

sulta

ts d

e re

quête

s

�La m

éth

ode getMetaData()

de la

cla

sse Connection

perm

et d

'obte

nir le

s

méta

-données c

oncern

ant la

base d

e d

onnée.

�E

lle re

nvoie

un DataBaseSetMetaData.

�O

n p

eut c

onnaître

:

�le

s é

lém

ents

SQ

L s

upporté

s p

ar la

base

�la

stru

ctu

re d

es d

onnées d

e c

elle

-ci (g

etCatalog, getTables…

)

© P

hilip

pe G

EN

OU

DU

JF

35

30/0

1/2

013

�la

stru

ctu

re d

es d

onnées d

e c

elle

-ci (g

etCatalog, getTables…

)

�La m

éth

ode getMetaData()

de la

cla

sse ResultSet

perm

et d

'obte

nir le

s

méta

-données d

'un ResultSet.

�E

lle re

nvoie

un ResultSetMetaData.

�O

n p

eut c

onnaître

:

�Le n

om

bre

de c

olo

nnes : g

etColumnCount()

�Le n

om

d'u

ne c

olo

nne : g

etColumnName(int col)

�Le ty

pe d

'une c

olo

nne : g

etColumnType(int col)

�…

JDBC

JDBC

Gestio

n d

es tra

nsactio

ns

Gestio

n d

es tra

nsactio

ns

�T

ransactio

n : p

erm

et d

e n

e v

alid

er u

n e

nsem

ble

de tra

item

ents

sur u

ne B

D q

ue

si ils

se s

ont to

us e

ffectu

és c

orre

cte

ment

�E

xem

ple

: transfe

rt de fo

nd =

débite

r un c

om

pte

+ c

rédite

r un a

utre

com

pte

�L’in

terfa

ce Connection

offre

des s

erv

ices d

e g

estio

n d

es tra

nsactio

ns

�setAutoCommit(boolean autoCommit)

défin

it le m

ode d

e la

connexio

n

(auto

-com

mit p

ar d

éfa

ut)

�commit()

décle

nche v

alid

atio

n d

e la

transactio

n

rollback()

annule

la tra

nsactio

n

© P

hilip

pe G

EN

OU

DU

JF

36

30/0

1/2

013

�rollback()

annule

la tra

nsactio

n

try {

con.setAutoCommit(false);

// exécuter les instructions qui constituent la transaction

stmt.executeUpdate("UPDATE INVENTORY SET ONHAND = 10 WHERE ID = 5");

stmt.executeUpdate("INSERT INTO SHIPPING (QTY) VALUES (5)");

...

// valide la transaction

con.commit()

}catch (SQLException e) {

con.rollback();

// annule les opérations de la transaction

}

Page 19: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Gestio

n d

es tra

nsactio

ns

Gestio

n d

es tra

nsactio

ns

�int getTransactionIsolation()

(de l'in

terfa

ce Connection

) pour

savoir q

uel s

upport le

SG

BD

et le

pilo

te J

DB

C o

ffrent p

our le

s tra

nsactio

ns

�Connection.TRANSACTION_NONE

�p

as d

e s

up

po

rt

�Connection.TRANSACTION_READ_UNCOMMITTED

�"d

irty-re

ad

s" u

n ro

w m

od

ifié p

ar u

ne

tran

sa

ctio

n p

eu

t être

lu p

ar u

ne

au

tre

tran

sa

ctio

n a

va

nt q

ue

les m

od

ifica

tion

s n

'aie

nt é

té v

alid

ée

s p

ar u

n c

om

mit

�"n

on

-rep

ea

tab

le re

ad

s" u

ne

tran

sa

ctio

n lit u

n ro

w, u

ne

se

co

nd

e tra

nsa

ctio

n

mo

difie

le ro

w, la

pre

miè

re tra

nsa

ctio

n re

lit le ro

w e

t ob

tien

t de

s v

ale

urs

diffé

ren

tes

© P

hilip

pe G

EN

OU

DU

JF

37

30/0

1/2

013

diffé

ren

tes

�"p

ha

nto

m-re

ad

s" u

ne

tran

sa

ctio

n lit to

us le

s ro

w s

atis

fais

an

t un

e c

on

ditio

n

(cla

use

WH

ER

E), u

ne

se

co

nd

e tra

nsa

ctio

n in

re u

n ro

w q

ui s

atis

fait c

ette

co

nd

ition

, la p

rem

ière

tran

sa

ctio

n re

lit les ro

w a

ve

c la

me

co

nd

ition

et e

lle

ob

tien

t les ro

w s

up

plé

me

nta

ires in

rés p

ar la

se

co

nd

e.

�Connection.TRANSACTION_READ_COMMITTED

�p

as d

e d

irty-re

ad

s

�Connection.TRANSACTION_REPEATABLE_READ,

�p

as d

e d

irty-re

ad

s e

t no

n-re

pe

ata

ble

-rea

ds

�Connection.TRANSACTION_SERIALIZABLE

�p

as d

e d

irty-re

ad

s,n

on

-rep

ea

tab

le-re

ad

s e

t ph

an

tom

-rea

ds

Niv

eau

po

ur O

racle

9i s

ur h

op

per a

vec ojdbc14

JDBC

JDBC

Gestio

n d

es tra

nsactio

ns

Gestio

n d

es tra

nsactio

ns

�A

PI J

DB

C 3

.0 a

ajo

uté

possib

ilité d

e d

éfin

ir des p

oin

ts d

e s

auvegard

e d

ans u

ne

transactio

n

Statement stmt = conn.createStatement();

conn.setAutocommit(false);

...

int rows = stmt.executeUpdate("INSERT INTO TAB1 ... ");

// set savepoint

Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1");

rows = stmt.executeUpdate("INSERT INTO TAB1 ... ");

© P

hilip

pe G

EN

OU

DU

JF

38

30/0

1/2

013

rows = stmt.executeUpdate("INSERT INTO TAB1 ... ");

...

conn.rollback(svpt1);

...

conn.commit();

conn.releaseSavePoint("SAVEPOINT_1")

Po

ur re

tirer u

n p

oin

t de s

au

veg

ard

e

SAVEPOINT_1

ne p

eu

t plu

s ê

tre u

tilisé d

an

s u

n ro

llback p

ar la

su

ite

An

nu

le to

ute

s le

s o

péra

tion

s e

ffectu

ées d

ep

uis

le

po

int d

e s

au

veg

ard

e

Page 20: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

A p

ropos d

e S

QLExceptio

nA p

ropos d

e S

QLExceptio

n

�S

QLE

xceptio

n d

éfin

it les m

éth

odes s

uiv

ante

s :

�getS

QLS

tate

() : --> u

n c

ode d

’éta

t de la

norm

e S

QL A

NS

I-92

�getE

rrorC

ode() : -->

un c

ode d

’erre

ur s

pecifiq

ue («

vendor-s

pécific

»)

�getN

extE

xceptio

n() : -->

perm

et a

ux c

lasses d

u J

DB

C d

e c

haîn

er u

ne

suite

de SQLExceptions

// du code très consciencieux

try {

...

© P

hilip

pe G

EN

OU

DU

JF

39

30/0

1/2

013

...

}catch (SQLException e) {

while(e != null) {

System.out.println("SQL Exception");

System.out.println(e.getMessage());

System.out.println("ANSI-92 SQL State : "+e.getSQLState());

System.out.println("Vendor error code : "+e.getErrorCode());

e = e.getNextException();

}

}

JDBC

JDBC

SQ

LW

arn

ing

SQ

LW

arn

ing

�Les c

lasses d

u J

DB

C o

nt la

possib

ilité d

e g

énére

r sans le

s la

ncer

des e

xceptio

ns

quand u

n p

roblè

me e

st in

terv

enu m

ais

qu’il n

’est p

as s

uffis

am

ment g

rave p

our

inte

rrom

pre

le p

rogra

mm

e

�E

xem

ple

: fixer u

ne m

ode d

e tra

nsactio

n q

ui n

’est p

as s

upporté

la b

ase d

e

données c

ible

(un m

ode p

ar d

éfa

ut s

era

utilis

é)

�SQLWarning

encapsule

mêm

e in

form

atio

n q

ue SQLException

�P

our le

s ré

cupére

r pas d

e b

loc trycatch

mais

à l’a

ide d

e m

éth

ode

getWarnings

des in

terfa

ces Connection

, Statement

, ResultSet

,

PreparedSatement

, CallableStatement

© P

hilip

pe G

EN

OU

DU

JF

40

30/0

1/2

013

PreparedSatement

, CallableStatement

void printWarninsg(SQLWarning warn) {

while

(warn != null) {

System.out.println("\nSQL Warning");

System.out.println(warn.getMessage());

System.out.println("ANSI-92 SQL State : "+warn.getSQLState());

System.out.println("Vendor error code : "+warn.getErrorCode());

warn = warn.getNextException();

}

}...

ResultSet rs = stmt.executeQuery("SELECT * FROM CLIENTS");

printWarnings( stmt.getWarnings()

);

printWarnings( rs.getWarnings()

);

...

Page 21: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

Api J

DBC 2

.0Api J

DBC 2

.0

�JD

BC

1.0

�package s

upplé

menta

ire (a

dd-o

n) p

our J

DK

1.0

�in

tégré

à l’A

PI d

e b

ase (c

ore

AP

I) du J

DK

1.1

�JD

BC

2.0

�spécific

atio

n p

ar S

UN

en m

ai 1

998

�e

xte

nsio

ns p

ou

r «m

eille

ure

» g

estio

n d

es ré

su

ltats

(ResultSets

«scro

llab

les

», «

mo

difia

ble

)

© P

hilip

pe G

EN

OU

DU

JF

41

30/0

1/2

013

«scro

llab

les

», «

mo

difia

ble

)

�m

ise

s à

jou

r gro

up

ée

s (b

atc

h u

pd

ate

s)

�su

pp

ort p

ou

r BL

OB

s (B

ina

ry L

arg

e O

bje

cts

) et C

LO

Bs (C

ha

racte

r La

rge

Ob

jects

)

�…

�in

tégré

à l

’AP

I de J

ava 2

(JD

K 1

.2)

�com

patib

ilité a

vec la

vers

ion 1

.0

�co

de

écrit p

ou

r JD

BC

1.0

co

mp

ile e

t fon

ctio

nn

e a

ve

c v

ers

ion

2.0

de

l’A

PI

JDBC

JDBC

ResultS

et J

DBC 2

.0ResultS

et J

DBC 2

.0

�P

ar d

éfa

ut lo

rsque l’o

n c

rée u

n S

tate

ment le

s o

bje

ts R

esultS

et s

ont e

n le

ctu

re

seule

(read o

nly

) et à

accès s

équentie

l (forw

ard

only

)

�A

vec J

DB

C 2

.0 p

ossib

ilité d

e c

réer d

es R

esultS

et

�« S

cro

llable

»

�plu

s d

e lim

itatio

n à

un p

arc

ours

séquentie

l

« U

pdata

ble

»

Statement stmt = conn.createStatement();

public Statement createStatement() throws SQLException

© P

hilip

pe G

EN

OU

DU

JF

42

30/0

1/2

013

�« U

pdata

ble

»

�possib

ilité d

e m

odifie

r les d

onnées d

ans la

BD

ResultSet.TYPE_FORWARD_ONLY

ResultSet.TYPE_SCROLL_INSENSITIVE

ResultSet.TYPE_SCROLL_SENSITIVE

public Statement createStatement(intresultSetType, intresultSetConcurrency)

ResultSet.CONCUR_READ_ONLY

ResultSet.CONCUR_UPDATABLE

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ,

ResultSet.CONCUR_UPDATABLE);

On

pe

ut m

od

ifier le

s d

on

es

d

e la

ba

se

via

le ResultSet

le ResultSet

es

t se

ns

ible

au

x

mo

dific

atio

ns

de

s v

ale

urs

da

ns

la

ba

se

de

do

nn

ée

s

Page 22: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

ResultS

et J

DBC 2

.0ResultS

et J

DBC 2

.0

�M

éth

odes d

e p

arc

ours

first()

last()

next()

previous()

beforeFirst()

Po

sitio

nn

e s

ur la

pre

miè

re lig

ne (1

er e

nre

gis

trem

en

t)

Po

sitio

nn

e s

ur la

dern

ière

lign

e (d

ern

ier e

nre

gis

trem

en

t)

Passe à

la lig

ne s

uiv

an

te

Passe à

la lig

ne p

récéd

an

te

Po

sitio

nn

e a

van

t la p

rem

ière

lign

e

© P

hilip

pe G

EN

OU

DU

JF

43

30/0

1/2

013

afterLast()

absolute(int)

relative(int)

Po

sitio

nn

e a

prè

s la

dern

ière

lign

e

Po

sitio

nn

e à

un

e lig

ne d

on

née

Dép

lacem

en

t d’u

n n

om

bre

de lig

nes d

on

né p

ar ra

pp

ort à

lign

e c

ou

ran

te

boolean isFirst()

boolean isBeforeFirst()

boolean isLast()

boolean isAfterLast()

Tru

e s

i cu

rseu

r po

sitio

nn

é s

ur la

pre

miè

re lig

ne

Tru

e s

i cu

rseu

r po

sitio

nn

é a

van

t la p

rem

ière

lign

e

Tru

e s

i cu

rseu

r po

sitio

nn

é s

ur la

dern

ière

lign

e

Tru

e s

i cu

rseu

r po

sitio

nn

é a

prè

s la

dern

ière

lign

e

�M

éth

odes d

e te

st d

e la

positio

n d

u c

urs

eur

JDBC

JDBC

ResultS

et J

DBC 2

.0ResultS

et J

DBC 2

.0

�M

odific

atio

n d

u R

esultS

et

�S

e p

lacer s

ur le

rang c

oncern

é

�M

éth

odes updateXXX(…)

�P

uis

updateRow()

�le

faire

avant d

e d

épla

cer le

curs

eur s

ur u

ne a

utre

ligne

© P

hilip

pe G

EN

OU

DU

JF

44

30/0

1/2

013

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.TYPE_CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery("SELECT NOM,ID_CLIENT FROM CLIENTS);

rs.first();

rs.updateInt(2,151970);

rs.updateRow();

Page 23: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

ResultS

et J

DBC 2

.0ResultS

et J

DBC 2

.0

�In

sertio

n d

’une lig

ne

�moveToInsertRow()

�M

éth

odes M

éth

odes updateXXX(…)

�P

uis

insertRow()

ResultSet rs = stmt.executeQuery("SELECT NOM,ID_CLIENT FROM CLIENTS);

rs.moveToInsertRow();

rs.updateString(1,"Jacques OUILLE");

rs.updateInt(2,151970);

rs.updateRow();

© P

hilip

pe G

EN

OU

DU

JF

45

30/0

1/2

013

�S

uppre

ssio

n d

’une lig

ne

�S

e p

lacer s

ur la

ligne

�deleteRow()

rs.updateRow();

�S

i aucune v

ale

ur n

’est s

pécifié

e p

our u

ne c

olo

nne n

’accepta

nt p

as la

vale

ur n

ul

, une SQLException

est la

ncée.

�moveToCurrentRow()

perm

et d

e s

e re

positio

nner s

ur la

ligne

coura

nte

avant l’a

ppel à

moveToInsertRow()

rs.last();

rs.deleteRow();

JDBC

JDBC

ResultS

et J

DBC 2

.0ResultS

et J

DBC 2

.0

�T

ous le

s ResultSet

ne s

ont p

as n

écessaire

ment m

odifia

ble

s

�E

n g

énéra

l la re

quête

ne d

oit ré

fére

ncer q

u’u

ne s

eule

table

sans jo

intu

re

�T

ous le

s d

rivers

JD

BC

ne s

upporte

nt p

as n

écessaire

ment e

t entiè

rem

ent le

s

ResultSet

« s

cro

llable

» e

t « u

pdata

ble

»

�l’o

bje

t DataBaseMetaData

fourn

it de l’in

form

atio

n q

uant a

u s

upport

pro

posé p

our le

s ResultSet

© P

hilip

pe G

EN

OU

DU

JF

46

30/0

1/2

013

pro

posé p

our le

s ResultSet

�Il fa

ut ê

trepru

dent s

i le lo

gic

iel q

ue l’o

n é

crit d

oit in

tera

gir a

vec u

ne

gra

nde v

arié

té d

e d

rivers

JD

BC

Page 24: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

JDBC 2

.0 B

atc

h u

pdate

sJDBC 2

.0 B

atc

h u

pdate

s

�F

onctio

nnalité

s a

jouté

es l'in

terfa

ce Statement

pour p

erm

ettre

de re

gro

uper

des tra

item

ents

qui s

ero

nt e

nvoyés e

n u

ne s

eule

fois

au S

GB

��

am

élio

ratio

n d

es p

erfo

rmances s

i nom

bre

de tra

item

ents

importa

nt

�P

as o

blig

ato

irem

ent s

upporté

es p

ar le

pilo

te

�m

éth

ode supportsBatchUpdates()

de DatabaseMetaData

void addBatch(String)

Ajo

ute

r au "lo

t" une c

haîn

e c

onte

nant u

ne re

quête

SQ

L.

Requête

de ty

pe INSERT

, UPDATE

, DELETE

ou D

DL (C

REATETABLE

, DROP TABLE

)

© P

hilip

pe G

EN

OU

DU

JF

47

30/0

1/2

013

ou D

DL (C

REATETABLE

, DROP TABLE

)

int[] executeBatch()

Exécute

toute

s le

s re

quête

s d

u lo

t. R

envoie

un ta

ble

au d

'entie

rs q

ui p

our c

haque re

quête

contie

nt s

oit :

•le

nom

bre

de m

ises à

jour e

ffectu

ées (e

ntie

r >=

0)

•SUCCESS_NO_INFO

si la

com

mande a

été

exécuté

e m

ais

on n

e

connaît p

as le

nom

re d

e ra

ng a

ffecté

s•EXECUTE_FAILED

si la

com

mande a

échoué

void clearBatch()

Supprim

e to

ute

s le

s re

quête

s s

tockées

En c

as d

'echec s

ur l'u

ne d

es re

quête

s u

ne BatchUpdateException

est la

ncée. S

elo

n le

s p

ilote

s le

s

requête

s q

ui s

uiv

ent d

ans le

lot p

euvent ê

tre o

u n

e p

as ê

tre e

xécuté

es.

JDBC

JDBC

JDBC 2

.0 B

atc

h u

pdate

sJDBC 2

.0 B

atc

h u

pdate

s

�E

xem

ple

s (T

he

JD

BC

Tu

toria

l: Ch

ap

ter 3

-A

dva

nce

d T

uto

rial -

Ma

yd

en

e F

ish

er

http

://java

.su

n.c

om

/de

ve

lop

er/B

oo

ks/J

DB

CT

uto

rial/in

de

x.h

tml)

con.setAutoCommit(false);

Statement stmt = con.createStatement();

stmt.addBatch("INSERT INTO COFFEES " +

"VALUES('Amaretto', 49, 9.99, 0, 0)");

stmt.addBatch("INSERT INTO COFFEES " +

"VALUES('Hazelnut', 49, 9.99, 0, 0)");

stmt.addBatch("INSERT INTO COFFEES " +

"VALUES('Amaretto_decaf', 49,

con.setAutoCommit(false);

PreparedStatement pstmt = con.prepareStatement(

"INSERT INTO COFFEES VALUES(

Ba

tch

up

da

te s

tatiq

ue

Ba

tch

up

da

te p

ara

tré

© P

hilip

pe G

EN

OU

DU

JF

48

30/0

1/2

013

"VALUES('Amaretto_decaf', 49,

10.99, 0, 0)");

stmt.addBatch("INSERT INTO COFFEES " +

"VALUES('Hazelnut_decaf', 49,

10.99, 0, 0)");

int [] updateCounts = stmt.executeBatch();

con.commit();

con.setAutoCommit(true);

"INSERT INTO COFFEES VALUES(

?, ?, ?, ?, ?)");

pstmt.setString(1, "Amaretto");

pstmt.setInt(2, 49);

pstmt.setFloat(3, 9.99);

pstmt.setInt(4, 0);

pstmt.setInt(5, 0);

pstmt.addBatch();

pstmt.setString(1, "Hazelnut");

pstmt.setInt(2, 49);

pstmt.setFloat(3, 9.99);

pstmt.setInt(4, 0);

pstmt.setInt(5, 0);

pstmt.addBatch();

// ... and so on for each new type of coffee

int [] updateCounts = pstmt.executeBatch();

con.commit();

Page 25: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

javax.s

ql

javax.s

ql

�javax.sql

package d

’exte

nsio

n s

tandard

de J

DB

C

�P

our le

s a

pplic

atio

ns J

EE

(Java E

ntre

pris

e E

ditio

n)

�In

clu

s e

n s

tandard

dans J

SE

(Java S

tandard

Editio

n) d

epuis

vers

ion 1

.4

�DataSource

: Obte

ntio

n d

u n

om

de la

base à

partir d

e s

erv

eurs

de n

om

s

plu

tôt q

ue d

’avoir le

nom

de la

base d

e d

onnées c

odé «

en d

ur »

dans

l’applic

atio

n.

Utilis

atio

n d

e J

ND

I (Java N

am

ing a

nd D

irecto

ry In

terfa

ce) p

our c

onnexio

n

© P

hilip

pe G

EN

OU

DU

JF

49

30/0

1/2

013

�U

tilisatio

n d

e J

ND

I (Java N

am

ing a

nd D

irecto

ry In

terfa

ce) p

our c

onnexio

n

à u

ne b

ase d

e d

onnée

�PooledConnection

: support p

our g

estio

n d

’un «

pool »

de c

onnexio

n

�gestio

n d

’un c

ache d

es c

onnexio

n o

uverte

s

�évite

la c

réatio

n d

e n

ouvelle

s c

onnexio

ns (c

e q

ui e

st c

oûte

ux)

�RowSet

: perm

et d

e tra

iter le

s ré

sulta

ts d

es re

quête

s c

om

me d

es

com

posants

JavaB

eans

�S

upport p

our le

s tra

nsactio

ns d

istrib

uées

JDBC

JDBC

javax.s

ql.D

ata

Sourc

eja

vax.s

ql.D

ata

Sourc

e

�L'o

bje

t DataSource

avec p

oolin

g d

e c

onnexio

ns m

ain

tient u

n e

nsem

ble

de

connexio

ns à

la B

D p

rête

s à

l'em

plo

i(p

oo

l ou

cach

e d

e c

on

nexio

ns).

Data

So

urc

e

Connection

En

fait P

ooledConnection

© P

hilip

pe G

EN

OU

DU

JF

50

30/0

1/2

013

En

fait P

ooledConnection

�Q

uand u

n c

ode a

besoin

d'a

ccéder à

la b

ase d

e d

onnées, il o

btie

nt u

ne

connexio

n e

n s

'adre

ssant à

la DataSource

DataSource ds;

...

Connection c = ds.getConnnection();

...

Page 26: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

javax.s

ql.D

ata

Sourc

eja

vax.s

ql.D

ata

Sourc

e

�L'o

bje

t DataSource

avec p

oolin

g d

e c

onnexio

ns m

ain

tient u

n e

nsem

ble

de

connexio

ns à

la B

D p

rête

s à

l'em

plo

i(p

oo

l ou

cach

e d

e c

on

nexio

ns).

Data

So

urc

e

Connection

En

fait P

ooledConnection

© P

hilip

pe G

EN

OU

DU

JF

51

30/0

1/2

013

En

fait P

ooledConnection

�Q

uand u

n c

ode a

besoin

d'a

ccéder à

la b

ase d

e d

onnées, il o

btie

nt u

ne

connexio

n e

n s

'adre

ssant à

la DataSource.

DataSource ds;

...

Connection c = ds.getConnnection();

...

c = c.close();

�Il c

onserv

e la

connexio

n ju

squ'à

sa fe

rmetu

re e

xplic

ite.

JDBC

JDBC

javax.s

ql.D

ata

Sourc

eja

vax.s

ql.D

ata

Sourc

e

�L'o

bje

t DataSource

avec p

oolin

g d

e c

onnexio

ns m

ain

tient u

n e

nsem

ble

de

connexio

ns à

la B

D p

rête

s à

l'em

plo

i(p

oo

l ou

cach

e d

e c

on

nexio

ns).

Data

So

urc

e

Connection

En

fait P

ooledConnection

© P

hilip

pe G

EN

OU

DU

JF

52

30/0

1/2

013

En

fait P

ooledConnection

�Q

uand u

n c

ode a

besoin

d'a

ccéder à

la b

ase d

e d

onnées, il o

btie

nt u

ne

connexio

n e

n s

'adre

ssant à

la DataSource.

DataSource ds;

...

Connection c = ds.getConnnection();

...

c = c.close();

�Il c

onserv

e la

connexio

n ju

squ'à

sa fe

rmetu

re e

xplic

ite.

�Lors

qu'u

ne c

onnexio

n e

st "fe

rmée", e

lle e

st e

n fa

it relâ

chée e

t rem

ise d

ans le

pool.

Page 27: Oracle Serveur - LIG Membreslig-membres.imag.fr/genoud/ENSJAVA/cours/supportsPDF/JDBC_2pp.… · JDBC interfaces de l'API JDBC L'API JDBC définit un ensemble d'interfaces (packag

JDBC

JDBC

�JD

BC

AP

I de b

as n

iveau

�P

arfo

is d

ifficile

à p

endre

en m

ain

�D

em

ande d

es c

onnais

sances "p

oin

tues" e

n B

D

�D

épendances p

ar ra

pport a

u S

GB

D c

ible

�N

om

bre

uses A

PI c

onstru

ites a

u d

essus d

e J

DB

C

�Jakarta

Com

mons D

bU

tils(s

implifie

utilis

atio

n d

e J

DB

C)

http

://jakarta

.ap

ach

e.o

rg/c

om

mo

ns/d

bu

tils/

© P

hilip

pe G

EN

OU

DU

JF

53

30/0

1/2

013

http

://jakarta

.ap

ach

e.o

rg/c

om

mo

ns/d

bu

tils/

�F

am

ew

ork

sde p

ers

ista

nce o

u d

e m

appin

gO

/R

�Ib

atis

, http

://ibatis

.ap

ach

e.o

rg/

�H

ibern

ate

, http

://ww

w.h

ibern

ate

.org

�JP

A –

Java P

ers

iste

nce

AP

IE, J

EE

5

–m

od

èle

de

pe

rsis

tan

ce

EJB

(En

trep

rise

Ja

va

Be

an

s) 3

.0 is

su

d'H

ibe

rna

te

�JD

O –

Java D

ata

Obje

cts