Top Banner
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/
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

Apr 15, 2018

Download

Documents

dinhque
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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