Vous êtes sur la page 1sur 12

Interface Java – Oracle :

JDBC

Christine Bonnet

Sommaire

Démarche globale JDBC --- 6


Accès en consultation --- 9
Accès en modification --- 13
Ordres dynamiques --- 19
Procédures stockées --- 24

I-2 Christine Bonnet

<Course name> <Lesson number>-1


JDBC
JDBC
((Java
Java DataBase
DataBase Connectivity
Connectivity)) ::
interface
interface API
API
((Application
Application Programming
Programming Interface
Interface))

permet
permet d ’exécuter des
d’exécuter des ordres
ordres SQL
SQL
dans
dans un
un programme
programme Java
Java

I-3 Christine Bonnet

Package java.sql

Æ Exé
Æ Exécution depuis
Exécution depuis un
un programme
programme hôte
hôte éécrit
crit en
en
Java
Java d’
d’ordres SQL
d’ordres SQL reconnus
reconnus par
par le
le noyau
noyau de de la
la
base
base de
de donné
donn ées cible;
données cible;

Æ Gestion
Æ Gestion des
des réésultats des
rrésultats des requêtes
requêtes SQL
SQL dans
dans le
le
code
code Java.
Java.

import java.sql. *;
java.sql.*;

I-4 Christine Bonnet

<Course name> <Lesson number>-2


CONNEXION À ORACLE

Æ par
Æ par l’’intermé
intermédiaire de
ll’intermédiaire de JDBC
JDBC en en utilisant
utilisant une
une URL
URL
((Uniform
Uniform Resource
Resource Locator)
Locator))
Locator

Exemple
Exemple ::
«« jdbc:oracle:
jdbc:oracle:thin
thin:@
:@iutainfo
iutainfo:1521:info8i
:1521:info8i »»
jdbc:oracle:thin:@iutainfo:1521:info8i

I-5 Christine Bonnet

ÉTABLISSEMENT D'UNE CONNEXION

1.
1. Déclaration
Déclaration et
et chargement
chargement du du driver
driver ::
Méthodes
Méthodes de
de la
la classe
classe DriverManager
DriverManager

public
public static
static void
void registerDriver(Driver
registerDriver(Driver driver)
driver) throws
throws
SQLException
SQLException

Exemple
Exemple ::
DriverManager.registerDriver(new
DriverManager.registerDriver (new
DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver());
oracle.jdbc.driver.OracleDriver());
oracle.jdbc.driver.OracleDriver());

I-6 Christine Bonnet

<Course name> <Lesson number>-3


ÉTABLISSEMENT D’UNE CONNEXION (SUITE)

2.
2. Connexion
Connexion àà une une base
base locale
locale en
en utilisant
utilisant l’URL,
l’URL, le
le nom
nom de
de
l’utilisateur,
l’utilisateur, son
son mot
mot de
de passe.
passe.
Méthodes
Méthodes dede la
la classe
classe DriverManager
DriverManager
public
public static
static Connection
Connection getConnection(String
getConnection(String url,
url, String
String user,
user,
String
String password)
password) throws
throws SQLException
SQLException

Exemple
Exemple ::
Connection
Connection connec
connec == DriverManager.getConnection
DriverManager.getConnection
("
"jdbc:oracle:
jdbc:oracle:thin
thin:@
:@iutainfo
iutainfo:1521:info8i",
:1521:info8i",
("jdbc:oracle:thin:@iutainfo:1521:info8i",
"2gr1","2gr1");
"2gr1","2gr1");
if
if (connec
( connec !=
(connec != null)
null) System.out.println("Connexion
null) System.out.println("Connexion
System.out.println("Connexion
etablie");
etablie ");
etablie");

I-7 Christine Bonnet

3.
3. Accè
Accès àà la
Accès la base
base :: requêtes
requêtes SQL
SQL …
…..

4.
4. Fermeture
Fermeture de
de la
la connexion
connexion ::
nomConnexion.close()
nomConnexion .close()
nomConnexion.close()

Exemple
Exemple ::
connec.close();
connec.close();
connec.close();

I-8 Christine Bonnet

<Course name> <Lesson number>-4


ACCÈS À LA BASE EN CONSULTATION
•• Cré
Création d'un
Création d'un objet
objet de
de type Statement qui
type Statement qui reç
reçoit l’
reçoit ’ordre
ll’ordre
SQL
SQL select
select et
et l’
’envoie au
ll’envoie au SGBD
SGBD pour
pour exé
exécution.
exécution.
¾ Méthode
¾ Méthode public
public Statement
Statement createStatement()
createStatement()

Statement
Statement nomOrdre
nomOrdre ==
nomConnexion.createStatement();
nomConnexion.createStatement();
nomConnexion.createStatement();

•• Cré
Cr éation d'un
Création d'un objet
objet de
de type ResultSet qui
type ResultSet qui reç
reçoit
reçoit
le
le réésultat de
rrésultat de l’’exé
exécution de
ll’exécution de la
la requête.
requête.
¾M
¾ éthode public
Méthode public ResultSet
ResultSet executeQuery(String
executeQuery(String sql)
executeQuery(String sql)
sql)

ResultSet
ResultSet nomResultSet
nomResultSet ==
nomOrdre.executeQuery("requête
nomOrdre.executeQuery("requête SQL
nomOrdre.executeQuery("requête SQL select
select ……");
");

I-9 Christine Bonnet

EXPLOITATION DES RÉSULTATS

¾M
¾ éthode public
Méthode public boolean
boolean next()
next()
next()
while
while ((nomResultSet.next())
nomResultSet.next())
nomResultSet.next()) {{
……
……
String
String nom
nom ==
nomResultSet.getString("
nomResultSet.getString("ename
ename");
");
nomResultSet.getString("ename");
…… public
public String
String getString(String
getString(String columnName)
columnName)
}}
…….
.
nomOrdre.close();
nomOrdre.close ();
nomOrdre.close();
nomResultSet.close();
nomResultSet.close();
nomResultSet.close();
nomConnexion.close();
nomConnexion.close();
nomConnexion.close();

I-10 Christine Bonnet

<Course name> <Lesson number>-5


EXEMPLE
import
import java.sql.*;
java.sql. *;
java.sql.*;
class
class JdbcTest
JdbcTest {{
public
public static
static void
void main
main (String
(String args
args [])
[]) throws
throws
SQLException
SQLException {{
//
// Chargement
Chargement du
du driver
driver
DriverManager.registerDriver
DriverManager.registerDriver (new
(new
oracle.jdbc.driver.OracleDriver());
oracle.jdbc.driver.OracleDriver());
oracle.jdbc.driver.OracleDriver());
//
// Connexion
Connexion àà une
une base
base locale
locale
Connection connec
Connection connec ==
DriverManager.getConnection("
DriverManager.getConnection("jdbc
jdbc:oracle:
:oracle:thin
thin:@
:@iutainfo
iutainfo:
:
DriverManager.getConnection("jdbc:oracle:thin:@iutainfo:
1521:info8i",
1521:info8i", "2gr1",
"2gr1", "2gr1");
"2gr1");

I-11 Christine Bonnet

//
// Cré
Création d'une
Création d'une requête
requête
Statement
Statement stmt
stmt == connec.createStatement
connec.createStatement ();
();
ResultSet rset = stmt.executeQuery ("select
ResultSet rset = stmt.executeQuery ("select
ename
ename from
from emp");
emp ");
emp");
//
// Affichage
Affichage des
des noms
noms des
des employé
employés
employés
while
while ((rset.next
rset.next ())
())
System.out.println
System.out.println ((rset.getString
rset.getString (1));
(1));
//
// Dééconnexion
DDéconnexion public
public String
String getString(int
getString(int columnIndex)
columnIndex)
stmt.close();
stmt.close ();
stmt.close();
rset.close();
rset.close();
rset.close();
connec.close();
connec.close();
connec.close();
}}
}}

I-12 Christine Bonnet

<Course name> <Lesson number>-6


ACCÈS POUR UN ORDRE DDL OU UN ORDRE DML
¾ Méthode
¾ Méthode public
public Statement
Statement createStatement()
createStatement()
Statement
Statement nomOrdre
nomOrdre ==
nomConnexion.createStatement();
nomConnexion.createStatement ();
nomConnexion.createStatement();
Statement
Statement nomOrdre
nomOrdre ==
nomConnexion.createStatement();
nomConnexion.createStatement();
nomConnexion.createStatement();

¾M
¾ éthode public
Méthode public int
int executeUpdate(String
executeUpdate(String sql)
executeUpdate(String sql)
sql)
int
int nomVariableResultat
nomVariableResultat ==
nomOrdre.executeUpdate("requête
nomOrdre.executeUpdate("requête SQL
nomOrdre.executeUpdate("requête SQL ……");
");
Valeur
Valeur retourné
retourn
retournéeée :: 00 pour
pour un
un ordre
ordre DDL
DDL create
create (ou
(ou nombre
nombre de de
tuples
tuples créé
créés),
s), 00 pour
créés), pour dropdrop table,
table, le
le nombre
nombre de de lignes
lignes traité
traitées
traitées
pour
pour un
un ordre
ordre DML
DML (insert,
(insert, update,
update, delete).
delete).
delete).

I-13 Christine Bonnet

EXEMPLE
import
import java.sql.*;
java.sql.*;
java.sql.*;
public
public class
class Tp2
Tp2 {{
public
public static void
static void main(String[]
main(String[] args)
args) throws
args) throws SQLException
SQLException {{
//
// connexion
connexion
DriverManager.registerDriver(new
DriverManager.registerDriver (new
DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver());
oracle.jdbc.driver.OracleDriver ());
oracle.jdbc.driver.OracleDriver());
Connection
Connection connec
connec ==
DriverManager.getConnection("
DriverManager.getConnection ("jdbc
jdbc:oracle:
:oracle:thin
thin:@
:@iutainfo
iutainfo:1521:
:1521:
DriverManager.getConnection("jdbc:oracle:thin:@iutainfo:1521:
info8i","2gr1","2gr1");
info8i","2gr1","2gr1");
//
// suppression
suppression puis
puis cré
création de
création de la
la table
table TEmployé
TEmploy és
TEmployés
Statement
Statement stmt0=
stmt0= connec.createStatement();
connec.createStatement();
connec.createStatement();
int
int r0 = stmt0.executeUpdate("drop table TEmployé
r0 = stmt0.executeUpdate("drop table TEmployés");
TEmployés");
System.out.println("suppression
System.out.println("suppression de
System.out.println("suppression de la
la table
table "" ++ r0);
r0);
Statement stmt=
stmt= connec.createStatement();
connec.createStatement();
Statement stmt= connec.createStatement();
int
int r1
r1 =stmt.executeUpdate
stmt.executeUpdate("
("create
create table
==stmt.executeUpdate("create table TEmployé
TEmploy és as
TEmployés as select
select **
from
from emp");
emp");
emp");
System.out.println("
System.out.println ("creation
creation de
System.out.println("creation de la
la table
table "" ++ r1);
r1);
I-14 Christine Bonnet

<Course name> <Lesson number>-7


•• TP2
TP2 question
question aa :: moyenne
moyenne des
des salaires
salaires
des
des employés ayant
employés ayant le
le même
même travail
travail que
que
l'employ é nn°
l'employé ° 7369
7369
Statement
Statement stmt1=
stmt1= connec.createStatement();
connec.createStatement ();
connec.createStatement();
ResultSet
ResultSet rset1
rset1 =stmt1.executeQuery("select
=stmt1.executeQuery("select
avg(sal)
avg (sal)
avg(sal) from
from TEmployé
TEmploy
TEmployésés where
where job=(select
job=(select
job from TEmployé
TEmploy
job from TEmployés é s where empno=7369)");
empno=7369)");
where empno=7369)");
while
while (rset1.next())
(rset1.next())
System.out.println(rset1.getFloat(1));
System.out.println(rset1.getFloat(1));
System.out.println(rset1.getFloat(1));

I-15 Christine Bonnet

•• TP2
TP2 question
question bb :: mmàj
àj du
du salaire
salaire des
des
employ és
employés (sal
(sal << moyenne
moyenne ??
moyenne_salaire
moyenne_salaire :: salaire
salaire ** 1.1)
1.1)
Statement
Statement stmt2=
stmt2= connec.createStatement();
connec.createStatement ();
connec.createStatement();
int
int r2
r2 =stmt2.executeUpdate("update
=stmt2.executeUpdate("update
TEmployé
TEmploy és xx set
TEmployés set sal
sal == (select
(select
decode(
decode( least(
least ( x.sal,
x.sal, avg(sal)),
avg(sal)),x.sal
x.sal,
,avg(sal
avg(sal
decode(least(x.sal,avg(sal)),x.sal,avg(sal
),x.sal
),x.sal*1.
*1. 1)
),x.sal*1. 1) from
from TEmployé
TEmploy és where
TEmployés where job=x.job
job= x.job)
job=x.job) )
where
where empno=7369");
empno =7369");
empno=7369");
System.out.println("nombre
System.out.println("nombre de
System.out.println("nombre de lignes
lignes mises
mises
aa jour " + r2);
jour " + r2);

I-16 Christine Bonnet

<Course name> <Lesson number>-8


//
// dééconnexion
ddéconnexion
stmt0.close();
stmt0.close();
stmt.close();
stmt.close();
stmt.close();
stmt1.close();
stmt1.close();
stmt2.close();
stmt2.close();
rset1.close();
rset1.close();
connec.close();
connec.close ();
connec.close();
}}
}} //
// fin
fin classe
classe Tp2
Tp2

I-17 Christine Bonnet

Exé
Exécution ::
Exécution
suppression
suppression de
de la
la table
table 00
cré
création de
création de la
la table
table 14
14
1105.75
1105.75
nombre
nombre de
de lignes
lignes mises
mises aa jour
jour 11
Appuyez
Appuyez sur une touche pour continuer...
sur une touche pour continuer...

I-18 Christine Bonnet

<Course name> <Lesson number>-9


ORDRES SQL DYNAMIQUES

Requête
Requête paramé
param étré
trée ::
paramétrée
¾ Utilisation
¾ Utilisation de
de la
la mé
m éthode
méthode
public
public PreparedStatement
PreparedStatement
prepareStatement(String
prepareStatement(String sql)
prepareStatement(String sql)
sql)
et
et
¾ du
¾ du caractè
caractère "?"
caractère "?" pour
pour repré
représenter la
représenter la valeur
valeur d’
d’une variable
d’une variable

PreparedStatement
PreparedStatement nomOrdre
nomOrdre ==
nomConnexion.prepareStatement("ordre
nomConnexion.prepareStatement("ordre sql
nomConnexion.prepareStatement("ordre sql contenant
contenant des
des ?
? ");
");

I-19 Christine Bonnet

ORDRES SQL DYNAMIQUES (suite)

Lecture
Lecture ou
ou renseignement
renseignement des
des variables
variables ::
¾M
¾ éthode setXXX,
Méthode setXXX,, avec
setXXX avec XXX
XXX type
type de
de la
la variable
variable
((String,
String, Int,
Int, Float,
Float
Float, Date,, …
, Date,
Date …))
Exemple
Exemple ::
public
public void
void setFloat(int
setFloat(int parameterIndex,
parameterIndex, float
float x)
x)

nomOrdre.setXXX(rang,
nomOrdre.setXXX(rang, valeur);
nomOrdre.setXXX(rang, valeur);

(rang
(rang :: position
position du
du paramè
paramètre dans
paramètre dans l’’ordre SQL)
ll’ordre SQL)

I-20 Christine Bonnet

<Course name> <Lesson number>-10


EXEMPLE
import
import java.sql.*;
java.sql.
java.sql.*;*;
class
class OrdreDyna
OrdreDyna {{
public
public static
static void
void main
main (String
(String args
args [])
[]) throws
throws
SQLException
SQLException { {
String
String unNom
unNom == "BobLEPONGE
BobLEPONGE";
";
""BobLEPONGE";
//
// Chargement
Chargement du du driver
driver Oracle
Oracle
DriverManager.registerDriver
DriverManager.registerDriver ((new new
oracle.jdbc.driver.OracleDriver()
oracle.jdbc.driver.OracleDriver
oracle.jdbc.driver.OracleDriver()); ())
);
//
// Connexion
Connexion àà uneune base
base locale
locale
Connection
Connection connec
connec == DriverManager.getConnection
DriverManager.getConnection
("jdbc
("jdbc:oracle:
:oracle:thin
thin:@:@iutainfo
iutainfo:1521:info8i","2gr1",
:1521:info8i","2gr1",
("jdbc:oracle:thin:@iutainfo:1521:info8i","2gr1",
"2gr1");
"2gr1" );
"2gr1");
//
// cré
création d'une
création d'une table
table
Statement
Statement stmt1
stmt1 == connec.createStatement();
connec.createStatement ();
connec.createStatement();
int
int rr == stmt1.executeUpdate("create
stmt1.executeUpdate(" create table
stmt1.executeUpdate("create table
adherent(
adherent (numad number(4)
adherent(numad number (4) primary
number(4) primary key,
key , nom
key, nom
varchar2(14))");
varchar2(14))
varchar2(14))");");
System.out.println("cr
System.out.println ("cré
éation de
System.out.println("création de la
la table
table "" ++ r);
r);

I-21 Christine Bonnet

//
// insertion
insertion d'un
d'un tuple
tuple
PreparedStatement
PreparedStatement insere
insere ==
connec.prepareStatement("
connec.prepareStatement ("insert
insert into
connec.prepareStatement("insert into adherent
adherent
values (?,?)");
values (?,?)");
//
// renseignement
renseignement desdes variables
variables
insere.setInt(
insere.setInt (1,123);
1,123);
insere.setInt(1,123);
insere.setString(
insere.setString (2,unNom
2,unNom);
insere.setString(2,unNom); );
//
// insertion
insertion dudu tuple
tuple
insere.executeUpdate();
insere.executeUpdate
insere.executeUpdate(); (); //
// sans
sans argument
argument
// lecture de la table
// lecture de la table
Statement
Statement stmt2=
stmt2= connec.createStatement();
connec.createStatement
connec.createStatement();();
ResultSet
ResultSet rset1
rset1 =stmt2.executeQuery("select
=stmt2.executeQuery(" select ** from
=stmt2.executeQuery("select from
adherent");
adherent ");
adherent");
while
while ((rset1.next()){
rset1.next()){
rset1.next()){
System.out.println(
System.out.println
System.out.println( ( rset1.getInt(1)+
rset1.getInt(1)+ "\ \t" );
""\t" );
System.out.println(
System.out.println( rset1.getString(2) );
System.out.println ( rset1.getString(2) );
}}

I-22 Christine Bonnet

<Course name> <Lesson number>-11


//
// Dé éconnexion
DDéconnexion
stmt1.close();
stmt1.close();
stmt2.close();
stmt2.close();
rset1.close();
rset1.close();
connec.close();
connec.close();
connec.close();
}}
}}

Exé
Exécution
Exécution
cré
création de
création de la
la table
table 00
123
123
BobLEPONGE
BobLEPONGE
Appuyez
Appuyez sur
sur une
une touche
touche pour
pour continuer...
continuer...

I-23 Christine Bonnet

PROCÉDURES STOCKÉES EN JAVA

1.
1. Cré
Création de
Création de classes
classes Java
Java
2.
2. Chargement
Chargement des
des classes
classes Java
Java dans
dans la la base
base de
de donné
donn ées
données
loadjava
loadjava ––user
user utilisateur/mot_de_passe
utilisateur/mot_de_passe
nomClasseJava.class
nomClasseJava.class
3.
3. Déploiement des
Déploiement des classes
classes Java
Java par
par la
la cré
cr éation d'une
création d'une
procé
procédure ou
procédure ou fonction
fonction stocké
stockée
stockée
4.
4. Appel
Appel de
de la
la fonction,
fonction, procé
proc édure stocké
procédure stockée àà partir
stockée partir du
du langage
langage
SQL
SQL :: CALL
CALL
9 àà l'intérieur
9 l'intérieur d'un
d'un bloc
bloc PL/SQL
PL/SQL
9 à l'intérieur d'un déclencheur
9 à l'intérieur d'un déclencheur
9 directement
9 directement au au niveau
niveau de
de SQL*PLUS
SQL*PLUS

I-24 Christine Bonnet

<Course name> <Lesson number>-12