Vous êtes sur la page 1sur 24

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

Appli Java

?
BD

Usage JDBC pour ex ecuter, depuis un programme Java, lensemble 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

Appli Java

API JDBC

?
BD

D enition JDBC (Java DataBase Connectivity ) est une API (Application Programming Interface ) qui permet dex ecuter des instructions SQL. JDBC fait partie du JDK (Java Development Kit ). Paquetage java.sql : import java.sql.*;

Introduction : Gestion du pilote

JDBC Driver Manager

?
BD

Appli Java

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,...

API JDBC

Introduction : Driver Manager

JDBC Driver Manager

Driver Protocole natif

API JDBC

Appli Java

BD Appels SQL

Java

La connexion... Elle peut s etablir SI on donne ladresse de la BD ` a laquelle se connecter...

Les classes et interfaces du package java.sql

Connexion prepareStatement

createStatement

prepareCall

sousclasse Statement

PreparedStatement

sousclasse CallableStatement Entres/Sorties de CS

Entres de PS executeQuery Data Types executeQuery getXXX getMoreResults/getResultSet ResultSet executeQuery

Etapes

Fonctionnement Etapes dun programme utilisant JDBC :


1 2 3 4

mettre en place le pilote ou driver. etablir une connexion avec une source de donn ees. eectuer les requ etes. utiliser les donn ees obtenues pour des achages, des traitements statistiques, etc. mettre ` a jour les informations de la source des donn ees. terminer la connexion. eventuellement, recommencer en 1.

5 6 7

Les etapes...
exemples
1

charger un pilote driver Class.forName(oracle.jdbc.driver.OracleDriver); cr eer un objet Connection Connection.maConnection=DriverManager.getConnection(url); url : String contenant ladresse de la base de donn ees cr eer un objet Statement Statement.maRequeteSQL=maConnection(); 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 lurl correspondante utiliser linterface java.sql.Driver : ecrire une classe Driver, pour cr eer une instance delle-m eme et lenregistrer 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 dinternet. Sch ema g en eral jdbc:<sous-protocole>:<compl ements> jdbc = protocole sous-protocole : pour distinguer le type de pilote jdbc oracle:thin ` a lIUT 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@srv1.ens.iut-orsay.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(srv1); ds.setPortNumber(1521); ds.setDataBaseName(etudom); ds.setUser(toto); ds.setPassword(mdpToto); Connection maConnexion=DriverManager.getConnection(url); }

Les tuyaux sont en place...

JDBC Driver Manager

Driver Protocole natif

API JDBC

Appli Java

BD Appels SQL

Java

Rappel : les classes et interfaces du package java.sql

Connexion prepareStatement

createStatement

prepareCall

sousclasse Statement

PreparedStatement

sousclasse CallableStatement Entres/Sorties de CS

Entres de PS executeQuery Data Types executeQuery getXXX getMoreResults/getResultSet ResultSet executeQuery

Pour dialoguer : Statement

Exemple Statement monInstruction = maConnexion.createStatement(); suivant linstruction SQL Instructions SQL M ethode SELECT UPDATE, INSERT,DELETE Autres executeQuery executeUpdate execute

Type retourn e ResultSet int boolean

Valeur retourn ee Lignes de r esultat Nb lignes modi ees 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 dun 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 lattribut ou rang dans la requ ete (sous forme dentier). 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 CHAR, VARCHAR2, NUMERIC, DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT, DOUBLE BINARY, VARBINARY, LONGVARBINARY DATE TIME TIMESTAMP

Type Java String java.math.BigDecimal boolean byte short int long oat double byte [ ] java.sql.Date java.sql.Time java.sql.Timestamp

Les valeurs NULL


Probl` eme : reconna tre dans Java le cas dune 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... Do` 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 aect ees par linstruction. Exemple int nbLignes = monInstruction.executeUpdate( INSERT INTO toto.Client(login, nomClient) VALUES ( + numero + , + nom + )); System.out.println(nbLignes + ligne(s) ins er ee(s)) ;

Modication de la d enition des donn ees

Pour modier la structure de la base La classe Statement a : execute(ordreSQL) Lordre SQL correspond ` a la cha ne de caract` eres contenant lordre ` a ex ecuter Elle retourne un boolean qui est vrai si il ny a pas eu derreur ` a l ex ecution..

D econnexion

Lib erer ResultSet et Statement, fermer la Connection Exemple monResultat.close() ; monInstruction.close() ; maConnexion.close() ;