cours bases de donn ees 2 eme ann ee iut - limsi · 2013-11-26 · resultset createstatement...
TRANSCRIPT
![Page 1: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/1.jpg)
Cours Bases de donnees 2eme annee IUTCours 6 : JDBC : ou comment lier ORACLE avec Java
1ere partie
Anne Vilnathttp://www.limsi.fr/Individu/anne/cours
![Page 2: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/2.jpg)
Plan
1 Introduction
2 les etapes de la connexionMise en place du piloteNommer la base de donneesEtablir la connexionDialogue avec la base de donneesDeconnexion
![Page 3: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/3.jpg)
Introduction : le probleme
BDAppli Java?
Usage
JDBC pour executer, depuis un programme Java, l’ensemble desordres SQL reconnus par la base de donnees cible.La base de donnees doit reconnaıtre le langage ANSI SQL-2.
![Page 4: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/4.jpg)
Introduction : JDBC
BD
AP
I JD
BC
Appli Java
?
Definition
JDBC (Java DataBase Connectivity) est une API (ApplicationProgramming Interface) qui permet d’executer des instructionsSQL.JDBC fait partie du JDK (Java Development Kit).Paquetage java.sql :
import java.sql.*;
![Page 5: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/5.jpg)
Introduction : Gestion du pilote
BDA
PI
JD
BC
Appli Java
?
JD
BC
Dri
ver
Man
ager
Le pilote...
Il va etablir le lien avec la base de donnees, en sachant “lui parler”.Dans JDBC : des classes chargees de gerer un pilote...Pilote “recent” : en JavaDes pilotes existent pour mySQL, postGresSQL, ACCESS,...
![Page 6: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/6.jpg)
Introduction : Driver Manager
BDA
PI
JD
BC
Appli Java
JD
BC
Dri
ver
Man
ager
Dri
ver
Pro
toco
le n
ati
fJava
Appels SQL
La connexion...
Elle peut s’etablir SI on donne l’adresse de la BD a laquelle seconnecter...
![Page 7: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/7.jpg)
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
prep
areStatem
ent
Connexion
Statement
ResultSet
createStatement
executeQuery
![Page 8: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/8.jpg)
Etapes
Fonctionnement
Etapes d’un programme utilisant JDBC :
1 mettre en place le pilote ou driver.
2 etablir une connexion avec une source de donnees.
3 effectuer les requetes.
4 utiliser les donnees obtenues pour des affichages, destraitements statistiques, etc.
5 mettre a jour les informations de la source des donnees.
6 terminer la connexion.
7 eventuellement, recommencer en 1.
![Page 9: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/9.jpg)
Les etapes...
exemples
1 charger un pilote driverClass.forName(“oracle.jdbc.driver.OracleDriver”);
2 creer un objet ConnectionConnection.maConnection=DriverManager.getConnection(url);url : String contenant l’adresse de la base de donnees
3 creer un objet StatementStatement.maRequeteSQL=maConnection();
4 envoyer la requete et recuperer le resultat dans un ResultSetResultSet.monResultat=
maRequeteSQL.executeQuery(texteRequeteSQL);texteRequeteSQL : String contenant le texte de la requete,par exemple :“SELECT * FROM Client”
![Page 10: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/10.jpg)
Mise en place du pilote
2 methodes :
Chargement statique
enregistrer le ou les drivers(s) a utiliser
a chaque connexion, passer comme argument l’urlcorrespondante
utiliser l’interface java.sql.Driver : ecrire une classe Driver,pour creer une instance d’elle-meme et l’enregistrer avec lamethode DriverManager.registerDriver()
pas la plus simple, ni la plus usitee...
![Page 11: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/11.jpg)
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,...
![Page 12: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/12.jpg)
Nommage des bases de donnees
Derivee des url d’internet.
Schema general
jdbc:<sous-protocole>:<complements>jdbc = protocolesous-protocole : pour distinguer le type de pilote jdbc oracle:thin al’IUTcomplements : la base de donnees. Syntaxe :login/motDePasse@ordinateur:port:base.Exemple : toto/[email protected]:1521:etudom
![Page 13: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/13.jpg)
Connexion
par la methode getConnection de DriverManager :
Exemple
import java.net.*;import java.sql.*;String url=”jdbc:oracle:thin:toto/[email protected]
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); }
![Page 14: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/14.jpg)
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); }
![Page 15: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/15.jpg)
Les tuyaux sont en place...
BD
AP
I JD
BC
Appli JavaJD
BC
Dri
ver
Man
ager
Dri
ver
Pro
toco
le n
ati
f
Java
Appels SQL
![Page 16: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/16.jpg)
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
prep
areStatem
ent
Connexion
Statement
ResultSet
createStatement
executeQuery
![Page 17: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/17.jpg)
Pour dialoguer : Statement
Exemple
Statement monInstruction = maConnexion.createStatement();
suivant l’instruction SQL
Instructions SQL Methode Type retourne Valeurretournee
SELECT executeQuery ResultSet Lignes deresultat
UPDATE, executeUpdate int Nb lignesINSERT,DELETE modifiees
Autres execute boolean Fauxsi erreur
![Page 18: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/18.jpg)
Consultation et recuperation de donnees
Exemple
ResultSet monResultat = monInstruction.executeQuery(“SELECT login, nomClient FROM toto.Client”);
ResultsSet et ses methodes
Resultat dans un ResultSetParcours analogue a celui d’un curseur avec la methode next, etacces aux colonnes avec getXXX
Exemple de parcours
while (monResultat.next()) {String nom = monResultat.getString(“nomClient”);int login=monResultat.getInt (“login”);// traitement des donnees recuperees
}
![Page 19: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/19.jpg)
Consultation et recuperation de donnees
ResultsSet et ses methodes
Le premier next positionne sur la premiere ligne.Parametres de getXXX : nom de l’attribut ou rang dans la requete(sous forme d’entier). Obligatoire pour les attributs calcules(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 donnees recuperees
}
![Page 20: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/20.jpg)
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
![Page 21: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/21.jpg)
Les valeurs NULL
Probleme : reconnaıtre dans Java le cas d’une valeur NULL.Conventions :
Pour les methodes getString(), getObject(), getDate(), ... :Null Java (il existe)
Pour les methodes getInt(), getByte(), getShort(), ... : lavaleur 0 est renvoyee
Pour la methode getBoolean(), la valeur Faux est renvoyee.
MAIS pas correct pour reconnaıtre des valeurs non renseigneesdans la base...D’ou la methode wasNull() de ResultSet.Fonctionnement :
lire la donnee,
tester avec wasNull() si elle vaut NULL au sens SQL
![Page 22: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/22.jpg)
Acces et mise a jour
Pour INSERT, DELETE et UPDATE...
La classe Statement a : executeUpdate()Elle retourne un int qui contient le nombre de lignes affectees parl’instruction.
Exemple
int nbLignes = monInstruction.executeUpdate(“INSERT INTO toto.Client(login, nomClient)
VALUES (“ + numero + “,” + nom + “)”);System.out.println(nbLignes + “ ligne(s) inseree(s)”) ;
![Page 23: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/23.jpg)
Modification de la definition des donnees
Pour modifier la structure de la base
La classe Statement a : execute(ordreSQL)L’ordre SQL correspond a la chaıne de caracteres contenant l’ordrea executerElle retourne un boolean qui est vrai si il n’y a pas eu d’erreur al’execution..
![Page 24: Cours Bases de donn ees 2 eme ann ee IUT - LIMSI · 2013-11-26 · ResultSet createStatement executeQuery. Etapes Fonctionnement Etapes d’un programme utilisant JDBC : 1 mettre](https://reader035.vdocuments.site/reader035/viewer/2022081607/5ee42cfbad6a402d666d7afb/html5/thumbnails/24.jpg)
Deconnexion
Liberer ResultSet et Statement, fermer la Connection
Exemple
monResultat.close() ;monInstruction.close() ;maConnexion.close() ;