SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Cours Bases de donn´ees 2`eme ann´ee IUT
Cours 6 : JDBC : ou comment lier ORACLE avec Java
1`ere partie
Anne Vilnat
http://www.limsi.fr/Individu/anne/cours
Plan
1 Introduction
2 les ´etapes de la connexion
Mise en place du pilote
Nommer la base de donn´ees
Etablir la connexion
Dialogue avec la base de donn´ees
Deconnexion
Introduction : le probl`eme
BDAppli Java
?
Usage
JDBC pour ex´ecuter, depuis un programme Java, l’ensemble des
ordres SQL reconnus par la base de donn´ees cible.
La base de donn´ees doit reconnaˆıtre le langage ANSI SQL-2.
Introduction : JDBC
BD
APIJDBC
Appli Java
?
D´efinition
JDBC (Java DataBase Connectivity) est une API (Application
Programming Interface) qui permet d’ex´ecuter des instructions
SQL.
JDBC fait partie du JDK (Java Development Kit).
Paquetage java.sql :
import java.sql.*;
Introduction : Gestion du pilote
BDAPIJDBCAppli Java
?
JDBCDriverManager
Le pilote...
Il va ´etablir le lien avec la base de donn´ees, en sachant “lui parler”.
Dans JDBC : des classes charg´ees de g´erer un pilote...
Pilote “r´ecent” : en Java
Des pilotes existent pour mySQL, postGresSQL, ACCESS,...
Introduction : Driver Manager
BDAPIJDBCAppli Java
JDBCDriverManager
DriverProtocolenatif
Java
Appels SQL
La connexion...
Elle peut s’´etablir SI on donne l’adresse de la BD `a laquelle se
connecter...
Les classes et interfaces du package java.sql
PreparedStatement CallableStatement
Data Types
prepareCall
sous−classe
Entrées de PS
executeQuery
sous−classe
getXXX
executeQuery
getMoreResults/getResultSet
Entrées/Sorties de CS
prepareStatement
Connexion
Statement
ResultSet
createStatement
executeQuery
Etapes
Fonctionnement
Etapes d’un programme utilisant JDBC :
1 mettre en place le pilote ou driver.
2 ´etablir une connexion avec une source de donn´ees.
3 effectuer les requˆetes.
4 utiliser les donn´ees obtenues pour des affichages, des
traitements statistiques, etc.
5 mettre `a jour les informations de la source des donn´ees.
6 terminer la connexion.
7 ´eventuellement, recommencer en 1.
Les ´etapes...
exemples
1 charger un pilote driver
Class.forName(“oracle.jdbc.driver.OracleDriver”);
2 cr´eer un objet Connection
Connection.maConnection=DriverManager.getConnection(url);
url : String contenant l’adresse de la base de donn´ees
3 cr´eer un objet Statement
Statement.maRequeteSQL=maConnection();
4 envoyer la requˆete et r´ecup´erer le r´esultat dans un ResultSet
ResultSet.monResultat=
maRequeteSQL.executeQuery(texteRequeteSQL);
texteRequeteSQL : String contenant le texte de la requˆete,
par exemple :
“SELECT * FROM Client”
Mise en place du pilote
2 m´ethodes :
Chargement statique
enregistrer le ou les drivers(s) `a utiliser
`a chaque connexion, passer comme argument l’url
correspondante
utiliser l’interface java.sql.Driver : ´ecrire une classe Driver,
pour cr´eer une instance d’elle-mˆeme et l’enregistrer avec la
m´ethode DriverManager.registerDriver()
pas la plus simple, ni la plus usit´ee...
Mise en place du pilote
Chargement dynamique
A la demande, sans noter explicitement le nom des classes :
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);
}
catch (Exception e){
System.out.println(”Impossible de charger le driver”);
return;
}
Des pilotes existent pour mySQL, postGresSQL, ACCESS,...
Nommage des bases de donn´ees
D´eriv´ee des url d’internet.
Sch´ema g´en´eral
jdbc:<sous-protocole>:<compl´ements>
jdbc = protocole
sous-protocole : pour distinguer le type de pilote jdbc oracle:thin `a
l’IUT
complements : la base de donn´ees. Syntaxe :
login/motDePasse@ordinateur:port:base.
Exemple : toto/mdpToto@orasrv1.ens.iut-orsay.fr:1521:etudom
Connexion
par la m´ethode getConnection de DriverManager :
Exemple
import java.net.*;
import java.sql.*;
String url=
”jdbc:oracle:thin:toto/mdpToto@r2d2.iut-orsay.u-
psud.fr:1521:etudom”;
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);
}
catch (Exception e){
System.out.println(”Impossible de charger le driver”);
return;
Connection maConnexion=DriverManager.getConnection(url); }
Connexion
ou en utilisant les objets DataSource
Exemple
import java.sql.*;
import oracle.jdbc.pool.*;
public class TestDataSource {
public static void main(String args[])
throws ClassNotFoundException, SQLException {
OracleDataSource ds = new OracleDataSource();
ds.setDriverType(’thin”);
ds.setServerName’(“r2d2”);
ds.setPortNumber(1521);
ds.setDataBaseName(“etudom”);
ds.setUser(“toto”);
ds.setPassword(“mdpToto”);
Connection maConnexion=DriverManager.getConnection(url); }
Les tuyaux sont en place...
BD
APIJDBC
Appli Java JDBCDriverManager
DriverProtocolenatif
Java
Appels SQL
Rappel : les classes et interfaces du package java.sql
PreparedStatement CallableStatement
Data Types
prepareCall
sous−classe
Entrées de PS
executeQuery
sous−classe
getXXX
executeQuery
getMoreResults/getResultSet
Entrées/Sorties de CS
prepareStatement
Connexion
Statement
ResultSet
createStatement
executeQuery
Pour dialoguer : Statement
Exemple
Statement monInstruction = maConnexion.createStatement();
suivant l’instruction SQL
Instructions SQL M´ethode Type retourn´e Valeur
retourn´ee
SELECT executeQuery ResultSet Lignes de
r´esultat
UPDATE, executeUpdate int Nb lignes
INSERT,DELETE modifi´ees
Autres execute boolean Faux
si erreur
Consultation et r´ecup´eration de donn´ees
Exemple
ResultSet monR´esultat = monInstruction.executeQuery(
“SELECT login, nomClient FROM toto.Client”);
ResultsSet et ses m´ethodes
R´esultat dans un ResultSet
Parcours analogue `a celui d’un curseur avec la m´ethode next, et
acc`es aux colonnes avec getXXX
Exemple de parcours
while (monResultat.next()) {
String nom = monResultat.getString(“nomClient”);
int login=monResultat.getInt (“login”);
// traitement des donn´ees r´ecup´er´ees
}
Consultation et r´ecup´eration de donn´ees
ResultsSet et ses m´ethodes
Le premier next positionne sur la premi`ere ligne.
Param`etres de getXXX : nom de l’attribut ou rang dans la requˆete
(sous forme d’entier). Obligatoire pour les attributs calcul´es
(MAX(...) ou quand les noms ne sont pas connus (SELECT *...)
Exemple de parcours
while (monResultat.next()) {
String nom = monResultat.getString(2);
int login=monResultat.getInt (1);
// traitement des donn´ees r´ecup´er´ees
}
Les correspondances de types
Type SQL Type Java
CHAR, VARCHAR2, String
NUMERIC, DECIMAL java.math.BigDecimal
BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT, DOUBLE double
BINARY, VARBINARY, LONGVARBINARY byte [ ]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
Les valeurs NULL
Probl`eme : reconnaˆıtre dans Java le cas d’une valeur NULL.
Conventions :
Pour les m´ethodes getString(), getObject(), getDate(), ... :
Null Java (il existe)
Pour les m´ethodes getInt(), getByte(), getShort(), ... : la
valeur 0 est renvoy´ee
Pour la m´ethode getBoolean(), la valeur Faux est renvoy´ee.
MAIS pas correct pour reconnaˆıtre des valeurs non renseign´ees
dans la base...
D’o`u la m´ethode wasNull() de ResultSet.
Fonctionnement :
lire la donn´ee,
tester avec wasNull() si elle vaut NULL au sens SQL
Acc`es et mise `a jour
Pour INSERT, DELETE et UPDATE...
La classe Statement a : executeUpdate()
Elle retourne un int qui contient le nombre de lignes affect´ees par
l’instruction.
Exemple
int nbLignes = monInstruction.executeUpdate(
“INSERT INTO toto.Client(login, nomClient)
VALUES (“ + numero + “,” + nom + “)”);
System.out.println(nbLignes + “ ligne(s) ins´er´ee(s)”) ;
Modification de la d´efinition des donn´ees
Pour modifier la structure de la base
La classe Statement a : execute(ordreSQL)
L’ordre SQL correspond `a la chaˆıne de caract`eres contenant l’ordre
`a ´ex´ecuter
Elle retourne un boolean qui est vrai si il n’y a pas eu d’erreur `a
l’´ex´ecution..
D´econnexion
Lib´erer ResultSet et Statement, fermer la Connection
Exemple
monResultat.close() ;
monInstruction.close() ;
maConnexion.close() ;

Contenu connexe

Tendances (18)

Hibernate
HibernateHibernate
Hibernate
 
Jpa Spring Hibernate
Jpa Spring HibernateJpa Spring Hibernate
Jpa Spring Hibernate
 
Marzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvcMarzouk architecture encouches-jee-mvc
Marzouk architecture encouches-jee-mvc
 
Hibernate
HibernateHibernate
Hibernate
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
JNDI Java Naming Derectory Interfaces
JNDI Java Naming Derectory InterfacesJNDI Java Naming Derectory Interfaces
JNDI Java Naming Derectory Interfaces
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 
4 Hibernate
4 Hibernate4 Hibernate
4 Hibernate
 
575
575575
575
 
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Objet Direct Formation JPA Hibernate
Objet Direct Formation JPA HibernateObjet Direct Formation JPA Hibernate
Objet Direct Formation JPA Hibernate
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Jdbc par4
Jdbc par4Jdbc par4
Jdbc par4
 
Springioc
SpringiocSpringioc
Springioc
 
Ch06
Ch06Ch06
Ch06
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 

Similaire à Jdbc

Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbcKarim Amane
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxsalmachtioui1
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Java et bases de données : JDBC
Java et bases de données : JDBCJava et bases de données : JDBC
Java et bases de données : JDBCMohammed Jaafar
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un bliantareq
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilanteejug
 
2- Configuration des référentiels ODI 11
2- Configuration des référentiels ODI 112- Configuration des référentiels ODI 11
2- Configuration des référentiels ODI 11samr
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart ClientGuillaume Sauthier
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieafdoumbia
 
Activity
ActivityActivity
Activitydido
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql courszan
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 

Similaire à Jdbc (20)

Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbc
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Java et bases de données : JDBC
Java et bases de données : JDBCJava et bases de données : JDBC
Java et bases de données : JDBC
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
1145709.ppt
1145709.ppt1145709.ppt
1145709.ppt
 
2- Configuration des référentiels ODI 11
2- Configuration des référentiels ODI 112- Configuration des référentiels ODI 11
2- Configuration des référentiels ODI 11
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
 
Activity
ActivityActivity
Activity
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 

Dernier

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 

Dernier (11)

Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 

Jdbc

  • 1. Cours Bases de donn´ees 2`eme ann´ee IUT Cours 6 : JDBC : ou comment lier ORACLE avec Java 1`ere partie Anne Vilnat http://www.limsi.fr/Individu/anne/cours
  • 2. Plan 1 Introduction 2 les ´etapes de la connexion Mise en place du pilote Nommer la base de donn´ees Etablir la connexion Dialogue avec la base de donn´ees Deconnexion
  • 3. Introduction : le probl`eme BDAppli Java ? Usage JDBC pour ex´ecuter, depuis un programme Java, l’ensemble des ordres SQL reconnus par la base de donn´ees cible. La base de donn´ees doit reconnaˆıtre le langage ANSI SQL-2.
  • 4. Introduction : JDBC BD APIJDBC Appli Java ? D´efinition JDBC (Java DataBase Connectivity) est une API (Application Programming Interface) qui permet d’ex´ecuter des instructions SQL. JDBC fait partie du JDK (Java Development Kit). Paquetage java.sql : import java.sql.*;
  • 5. Introduction : Gestion du pilote BDAPIJDBCAppli Java ? JDBCDriverManager Le pilote... Il va ´etablir le lien avec la base de donn´ees, en sachant “lui parler”. Dans JDBC : des classes charg´ees de g´erer un pilote... Pilote “r´ecent” : en Java Des pilotes existent pour mySQL, postGresSQL, ACCESS,...
  • 6. Introduction : Driver Manager BDAPIJDBCAppli Java JDBCDriverManager DriverProtocolenatif Java Appels SQL La connexion... Elle peut s’´etablir SI on donne l’adresse de la BD `a laquelle se connecter...
  • 7. Les classes et interfaces du package java.sql PreparedStatement CallableStatement Data Types prepareCall sous−classe Entrées de PS executeQuery sous−classe getXXX executeQuery getMoreResults/getResultSet Entrées/Sorties de CS prepareStatement Connexion Statement ResultSet createStatement executeQuery
  • 8. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre en place le pilote ou driver. 2 ´etablir une connexion avec une source de donn´ees. 3 effectuer les requˆetes. 4 utiliser les donn´ees obtenues pour des affichages, des traitements statistiques, etc. 5 mettre `a jour les informations de la source des donn´ees. 6 terminer la connexion. 7 ´eventuellement, recommencer en 1.
  • 9. Les ´etapes... exemples 1 charger un pilote driver Class.forName(“oracle.jdbc.driver.OracleDriver”); 2 cr´eer un objet Connection Connection.maConnection=DriverManager.getConnection(url); url : String contenant l’adresse de la base de donn´ees 3 cr´eer un objet Statement Statement.maRequeteSQL=maConnection(); 4 envoyer la requˆete et r´ecup´erer le r´esultat dans un ResultSet ResultSet.monResultat= maRequeteSQL.executeQuery(texteRequeteSQL); texteRequeteSQL : String contenant le texte de la requˆete, par exemple : “SELECT * FROM Client”
  • 10. Mise en place du pilote 2 m´ethodes : Chargement statique enregistrer le ou les drivers(s) `a utiliser `a chaque connexion, passer comme argument l’url correspondante utiliser l’interface java.sql.Driver : ´ecrire une classe Driver, pour cr´eer une instance d’elle-mˆeme et l’enregistrer avec la m´ethode DriverManager.registerDriver() pas la plus simple, ni la plus usit´ee...
  • 11. Mise en place du pilote Chargement dynamique A la demande, sans noter explicitement le nom des classes : try { Class.forName(“oracle.jdbc.driver.OracleDriver”); } catch (Exception e){ System.out.println(”Impossible de charger le driver”); return; } Des pilotes existent pour mySQL, postGresSQL, ACCESS,...
  • 12. Nommage des bases de donn´ees D´eriv´ee des url d’internet. Sch´ema g´en´eral jdbc:<sous-protocole>:<compl´ements> jdbc = protocole sous-protocole : pour distinguer le type de pilote jdbc oracle:thin `a l’IUT complements : la base de donn´ees. Syntaxe : login/motDePasse@ordinateur:port:base. Exemple : toto/mdpToto@orasrv1.ens.iut-orsay.fr:1521:etudom
  • 13. Connexion par la m´ethode getConnection de DriverManager : Exemple import java.net.*; import java.sql.*; String url= ”jdbc:oracle:thin:toto/mdpToto@r2d2.iut-orsay.u- psud.fr:1521:etudom”; try { Class.forName(“oracle.jdbc.driver.OracleDriver”); } catch (Exception e){ System.out.println(”Impossible de charger le driver”); return; Connection maConnexion=DriverManager.getConnection(url); }
  • 14. Connexion ou en utilisant les objets DataSource Exemple import java.sql.*; import oracle.jdbc.pool.*; public class TestDataSource { public static void main(String args[]) throws ClassNotFoundException, SQLException { OracleDataSource ds = new OracleDataSource(); ds.setDriverType(’thin”); ds.setServerName’(“r2d2”); ds.setPortNumber(1521); ds.setDataBaseName(“etudom”); ds.setUser(“toto”); ds.setPassword(“mdpToto”); Connection maConnexion=DriverManager.getConnection(url); }
  • 15. Les tuyaux sont en place... BD APIJDBC Appli Java JDBCDriverManager DriverProtocolenatif Java Appels SQL
  • 16. Rappel : les classes et interfaces du package java.sql PreparedStatement CallableStatement Data Types prepareCall sous−classe Entrées de PS executeQuery sous−classe getXXX executeQuery getMoreResults/getResultSet Entrées/Sorties de CS prepareStatement Connexion Statement ResultSet createStatement executeQuery
  • 17. Pour dialoguer : Statement Exemple Statement monInstruction = maConnexion.createStatement(); suivant l’instruction SQL Instructions SQL M´ethode Type retourn´e Valeur retourn´ee SELECT executeQuery ResultSet Lignes de r´esultat UPDATE, executeUpdate int Nb lignes INSERT,DELETE modifi´ees Autres execute boolean Faux si erreur
  • 18. Consultation et r´ecup´eration de donn´ees Exemple ResultSet monR´esultat = monInstruction.executeQuery( “SELECT login, nomClient FROM toto.Client”); ResultsSet et ses m´ethodes R´esultat dans un ResultSet Parcours analogue `a celui d’un curseur avec la m´ethode next, et acc`es aux colonnes avec getXXX Exemple de parcours while (monResultat.next()) { String nom = monResultat.getString(“nomClient”); int login=monResultat.getInt (“login”); // traitement des donn´ees r´ecup´er´ees }
  • 19. Consultation et r´ecup´eration de donn´ees ResultsSet et ses m´ethodes Le premier next positionne sur la premi`ere ligne. Param`etres de getXXX : nom de l’attribut ou rang dans la requˆete (sous forme d’entier). Obligatoire pour les attributs calcul´es (MAX(...) ou quand les noms ne sont pas connus (SELECT *...) Exemple de parcours while (monResultat.next()) { String nom = monResultat.getString(2); int login=monResultat.getInt (1); // traitement des donn´ees r´ecup´er´ees }
  • 20. Les correspondances de types Type SQL Type Java CHAR, VARCHAR2, String NUMERIC, DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT, DOUBLE double BINARY, VARBINARY, LONGVARBINARY byte [ ] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp
  • 21. Les valeurs NULL Probl`eme : reconnaˆıtre dans Java le cas d’une valeur NULL. Conventions : Pour les m´ethodes getString(), getObject(), getDate(), ... : Null Java (il existe) Pour les m´ethodes getInt(), getByte(), getShort(), ... : la valeur 0 est renvoy´ee Pour la m´ethode getBoolean(), la valeur Faux est renvoy´ee. MAIS pas correct pour reconnaˆıtre des valeurs non renseign´ees dans la base... D’o`u la m´ethode wasNull() de ResultSet. Fonctionnement : lire la donn´ee, tester avec wasNull() si elle vaut NULL au sens SQL
  • 22. Acc`es et mise `a jour Pour INSERT, DELETE et UPDATE... La classe Statement a : executeUpdate() Elle retourne un int qui contient le nombre de lignes affect´ees par l’instruction. Exemple int nbLignes = monInstruction.executeUpdate( “INSERT INTO toto.Client(login, nomClient) VALUES (“ + numero + “,” + nom + “)”); System.out.println(nbLignes + “ ligne(s) ins´er´ee(s)”) ;
  • 23. Modification de la d´efinition des donn´ees Pour modifier la structure de la base La classe Statement a : execute(ordreSQL) L’ordre SQL correspond `a la chaˆıne de caract`eres contenant l’ordre `a ´ex´ecuter Elle retourne un boolean qui est vrai si il n’y a pas eu d’erreur `a l’´ex´ecution..
  • 24. D´econnexion Lib´erer ResultSet et Statement, fermer la Connection Exemple monResultat.close() ; monInstruction.close() ; maConnexion.close() ;