Inroduction À JDBC
Inroduction À JDBC
Inroduction À JDBC
à JDBC
Introduction
JDBC, Java Data Base Connectivity est un ensemble de classes (API – Application
Programming Interface --JAVA) permettant de se connecter à une base de données
relationnelle en utilisant des requêtes SQL ou des procédures stockées.
L’API JDBC a été développée de manière à pouvoir se connecter à n’importe quelle base
de données avec la même syntaxe; cette API est dite indépendante du SGBD utilisé.
y Un pilote ou driver JDBC est un "logiciel" qui permet de convertir les requêtes
JDBC en requêtes spécifiques auprès de la base de données.
Dans le cas d’oracle, les drivers JDBC sont fournis par Oracle (en principe installés avec
la base de données) téléchargeables à l’adresse.
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-
090769.html
Page 1
Saliha Yacoub
Types de drivers JDBC
Les drivers de Type 1 : ODBC-JDBC bridges, ODBC (Open Data Base Connectivity)
est une interface propre à Microsoft et qui permet l’accès à n’importe quelle base de
données (Panneau de configuration /Outils d’administration/ Sources de données ODBC
Chaque requête JDBC est convertie par ce pilote en requête ODBC qui est par la suite
convertie une seconde fois dans le langage spécifique de la base de donnée.
Cette technique est la moins optimale puisque les bases de données sont disponibles
uniquement que par technologie ODBC.
Ce type de driver traduit les appels de JDBC à un SGBD particulier, grâce à un mélange
d'API java et d'API natives. (propre au SGBD).
Page 2
Saliha Yacoub
Il est de ce fait nécessaire de fournir au client l’API native de la base de données.
Permet la connexion à une base de données via un serveur intermédiaire régissant l’accès
aux multiples bases de données
Page 3
Saliha Yacoub
Ce type de driver est portable car écrit entièrement en java. Il est adapté pour le Web.
Ce type de driver peut être facilement utilisé par une applet, mais dans ce cas le serveur
intermédiaire doit obligatoirement être installé sur la machine contenant le serveur Web.
Ce type de driver est connu sous le nom Direct Database Pure Java Driver), permet
d’accéder directement à la base de données (sans ODBC ni Middleware). C’est le type le
plus optimal.
C’est ce type de driver qui sera utilisé pour accéder aux bases de données oracle
Page 4
Saliha Yacoub
Architecture
Dans le modèle two-tier, une application JAVA (ou une applet) dialogue avec le SGBD
par l’intermédiaire du pilote JDBC. L’application JAVA et le pilote JDBC s’exécutent sur
l’ordinateur client tandis que le SGBD est placé sur un serveur.
C’est ce type d’architecture qui nous concerne actuellement dans notre cours.
Dans le modèle three-tier, l’applet (ou l’application JAVA) ne dialogue plus directement
avec un SGBD : un middle-tier fait le lien entre ces deux composants
Page 5
Saliha Yacoub
Le SGBD exécute les requêtes SQL et envoie les résultats au middle tier. Ces résultats
sont ensuite communiqués à l’applet sous forme d’appels http.
Fonctionnement
Pour utiliser NetBeans avec JDBC et oracle, vous devez inclure les librairies (.Jar)
à votre projet : ces librairies sont, selon la version de votre JDK, ojdbc6.jar (pour
JDK 1.6) et orai18n.jar
Établissement d’une connexion
Pour établir une connexion, il faut d’abord charger le driver en utilisant la méthode
forName de la classe Class comme suit : Class.forName(string driver). Pour
oracle, l’instruction est la suivante :
Page 6
Saliha Yacoub
Class.forName ("oracle.jdbc.driver.OracleDriver");
Quand une classe Driver est chargée, elle doit créer une instance d’elle même et
s’enregistrer auprès du DriverManager.
try
Class.forName ("oracle.jdbc.driver.OracleDriver");
System.out.println("Pilote chargé");
catch(ClassNotFoundException cnfe)
"jdbc:oracle:thin:@IP:port:orcl", "nomUsager","Motdepasse"
Page 7
Saliha Yacoub
public static void main(String[] args) {
String motdepasse="oracle1";
try
Class.forName ("oracle.jdbc.driver.OracleDriver");
System.out.println("Pilote chargé");
catch(ClassNotFoundException cnfe)
try
System.out.println("connécté");
Page 8
Saliha Yacoub
Exécution de requêtas SQL : créer un « statement » d’une requête
particulière.
3. CallableStatement:
Exécution de requêtas SQL : executeUpdate; executeQuery, execute
La méthode ExecuteUpdate est utilisée pour les requêtes DML (INSERT, DELETE,
UPDATE)
Syntaxe
objetStatement.executeUpdate(String Requête_SQL]);
ou
objetPreparedStatement.executeUpdate(String Requête_SQL]);
Page 9
Saliha Yacoub
Exemple :
System.out.println("connexion établie");
stm .executeUpdate(requete1);
System.out.println("insertion complétée");
Exercice 1 :
Elle retourne un objet de type ResultSet contenant tous les résultats de la requête (les
tuples sélectionnés).
Syntaxe
objetResultSet=objetStatement.executeQuery(String ordreSQL);
ou
objetResultSet=objetPreparedStatement.executeQuery(String ordreSQL);
Page 10
Saliha Yacoub
Exploitation des résultats des requêtes SQL
• On y accède ligne par ligne, puis colonne par colonne dans la ligne.
Pour pouvoir récupérer les données contenues dans l’instance de ResultSet, celui-ci
met à disposition des méthodes permettant de :
etc.
Page 11
Saliha Yacoub
Exemple
String requete2= "select nom, prenom from employes where codedep = 'inf'";
System.out.println("connexion établie");
while (rest.next())
System.out.println();
Exercice 2
Compléter le programme précédent pour qu’il affiche la liste des employés dont le nom
commence par R;
Fermeture d’une connexion :
La connexion est fermée avec la méthode close de l’objet connexion.close();
Page 12
Saliha Yacoub
Utilisation du PreparedStatement
Ce type d’interface est utilisé pour des requêtes paramétrées. PreparedStatement est
utilisé dans le cas 0ù la requête va être exécutée plusieurs fois. De plus Les requêtes sont
précompilées.
Remarquez
y [Objet PreparedStatement].setBoolean([index],[valeur]);
y [Objet PreparedStatement].setInt([index],[valeur]);
y [Objet PreparedStatement].setFloat([index],[valeur]);
y Etc…
Exemple :
// se connecter
stm2.setString(1, "Blabla");
stm2.setString(2, "Alpha");
stm2.executeUpdate();
Exercice 3 :
Écrire la partie du programme JAVA qui permet de mettre à jour le prix unitaire
(paramètre ) et la quantité (paramètre) selon le numéro de commande (paramètre) de la
table commander
Page 13
Saliha Yacoub
Type de parcours du ResultSet
1. Permet de parcourir les résultats dans les deux sens grâce aux méthodes:
Même principe que le type précédent sauf que, les occurrences reflètent les mises à jour qui
peuvent intervenir durant le parcours
Modification des données du ResultSet:
Par défaut, un ResultSet contient des données en lecture seulement, mais il est possible
d’obtenir un ResultSet modifiable.
Page 14
Saliha Yacoub
Le type de ResultSet et le mode d’utilisation (read only ou ubdatable) doit se
faire lors de la création du Statement
Exemple
Statement instruction =
connexionBd.getConnexion().createStatement(ResultSet.
TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_ READ_ONLY);
Dans le cas d’une modification (updatable), voici les opérations pour une mise à jour ou
une insertion
y etc.
Exemple
resultat.next()
resultat.updateString("nom", "martin");
resultat.updateRow();
Page 15
Saliha Yacoub
Dans le cas d’une insertion :
resultat.moveToInsertRow();
resultat.updateString("nom", "Yanick");
resultat.updateInt("age", 19);
resultat.insertRow();
Méthode de déplacement dans le ResultSet
Pour se déplacer à l’intérieur du ResultSet, on utilisera la méthode next() pour le
parcours avant et la méthode previous() pour le parcours inverse. Les autres
méthodes sont données dans le tableau suivant.
Méthode Rôle
Page 16
Saliha Yacoub
déplace le curseur sur la ligne dont le numéro est fourni
en paramètre à partir du début si il est positif et à partir
boolean absolute()
de la fin si il est négatif. 1 déplace sur la première ligne, -
1 sur la dernière, -2 sur l'avant dernière ...
Méthodes pour obtenir les données et la structure
Méthode Rôle
Page 17
Saliha Yacoub
retourne le contenu de la colonne dont le numéro est
getFloat(int)
passé en paramètre sous forme de nombre flottant.
getFloat(String)
getDate(String)
Type de données JDBC (correspondance SQL et JAVA)
Page 18
Saliha Yacoub
DOUBLE getDouble double
Page 19
Saliha Yacoub
Sources :
http://en.wikipedia.org/wiki/JDBC_driver#Type_4_Driver_-_Native-Protocol_Driver
http://download.oracle.com/javase/tutorial/jdbc/overview/architecture.html
http://java.developpez.com/
Page 20
Saliha Yacoub