Vous êtes sur la page 1sur 5

Introduction JDBC

Valre VIANDIER
v.viandier@consultant.com
Utilisation de JDBC
Les accs une base de donnes doivent tre effectus en sept tapes conscutives.
1. Chargement dun pilote JDBC
2. Dfinition de lURL de connexion.
3. Etablissement de la connexion.
4. Cration dune instruction.
5. Excution de la requte.
6. Traitement des rsultats.
7. Fermeture de la connexion.

Chacune de ces tapes un cot en terme de temps et de performances. Imaginez des dizaines
dutilisateur effectuant le mme scnario sur un site
Mais concentrons-nous avant tout expliquer et mettre en uvre chacune des tapes.

Chargement dun pilote JDBC


Le pilote JDBC est un logiciel qui a connaissance des mthodes daccs votre base de donnes.
Il existe 4 types de pilotes JDBC.

Ce pilote est disponible sous forme de classe java et gnralement dans un pacquage JAR.
La premire tape consiste donc charger cette classe. Pour cela, lutilisation de la mthode statique
Class.forName() nous est dune aide prcieuse. En effet, grce lutilisation de cette classe, votre
programme a la possibilit de rester totalement indpendant de la base de donnes utilise en
conservant le nom du pilote dans un fichier de proprits.
Lutilisation de la mthode Class.forName() peut lever une exception de type
ClassNotFoundException, il convient donc de placer le chargement du pilote dans un bloc scuris.

Exemple :

Try {
Class.forName( oracle.jdbc.driver.OracleDriver ) ;
}
catch(ClassNotFoundException e) {
System.err.println( Erreur de chargement du driver : + e) ;
}

Pour information, le pilote charger lors de lutilisation dune base de donnes de type ODBC est
sun.jdbc.odbc.JdbcOdbcDriver .
Pour obtenir plus dinformations sur les pilotes JDBC, rfrez-vous ladresse suivante :
http://java.sun.com/jdbc/drivers.html

Lutilisation du chargement dune classe au moment de lexcution par la mthode Class.forName()


requiers que celle-ci se trouve dans votre CLASSPATH.

Dfinition de lURL de connexion.


Afin de localiser votre serveur ou votre base de donnes, il est indispensable de spcifier une adresse
sous forme dURL de type jdbc: .
Le format exact de cette URL est dpendant du pilote JDBC utilis. Je ne peux que vous inviter
consulter la documentation du pilote que vous devez mettre en uvre. Cependant, pour une
connexion une base de donnes en utilisant un driver JDBC, lURL se compose comme suit :
jdbc:odbc:nomdupiloteodbc
Par exemple, jdbc:odbc:comptoir vous permettra de vous connecter la base de donnes Access
livre avec le produit aprs avoir dfinis un alias ODBC nomm comptoir par le panneau de
configuration.
Etablissement de la connexion
La troisime tape doit nous permettre de rentrer en contact, pour la premire fois, avec notre base de
donnes. Cest la connexion proprement parler.
Lors de la connexion, il est fort probable que vous deviez spcifier un certain nombre de paramtres
tels que le nom de lutilisateur et son mot de passe.
Pour ltablissement de la connexion, nous allons utiliser une classe du pacquage java.sql, la classe
DriverManager. Celle-ci dispose dune mthode statique permettant dobtenir une connexion notre
URL, la mthode getConnection() qui retourne un objet de type Connexion. Cette mthode peut, si la
connexion choue ou si aucun pilote ne prend en charge lURL spcifie, une exception de type
SQLException.

Exemple :
Import java.sql.* ;

try {
Connection con = DriverManager.getConnection(url,userId,password) ;
}
catch(SQLException sqle) {
System.err.println( Erreur lors de la connexion : + sqle) ;
}

Une fois la connexion tablie, vous pouvez obtenir un certain nombre dinformations en utilisant la
classe DatabaseMetaData. Une instance de cette classe vous est retourne par la mthode
Connexion.getDatabaseMetaData().

Exemple :
import java.sql.* ;

try {
Connection con = DriverManager.getConnection(url,userId,password) ;
DatabaseMetaData metaData = con.getMetaData();

System.out.println(metaData.getDatabaseProductName());
System.out.println(metaData.getDatabaseProductVersion());
}
catch(SQLException sqle) {
System.err.println( Erreur lors de la connexion : + sqle) ;
}

Cration dune instruction.


Afin daccder ou de modifier les informations contenues dans votre base de donnes, il convient
dutiliser un objet de type Statement. Une instance de cet objet est retourne par la mthode
Connexion.createStatement() comme ceci :

Statement statement = con.createStatement() ;

Excution dune requte


Aprs avoir obtenu notre Statement, nous allons nous en servir pour effectuer une requte sur notre
base de donnes. Les requtes de type slection doivent utiliser un objet de type ResultSet afin de
pouvoir en traiter le rsultat.
Exemple :
String query = "SELECT * FROM Employs";
ResultSet resultset = statement.executeQuery(query);

Si vous devez utiliser une requte de type commande (INSERT, DELETE ou UPDATE), il sera
prfrable de passer par la mthode executeUpdate() qui, en retour, vous fournira le nombre de lignes
affectes par votre requte.

Exemple :
String query = "DELETE FROM Employs WHERE Rgion = WA";
int result = statement.executeUpdate(query) ;

Traitement du rsultat
Lobjet prcdemment utilis nous permet davoir un accs aux donnes rsultantes de notre requte en mode
enregistrement par enregistrement. Un certain nombre daccesseurs ont t dfini afin de rcuprer unitairement
les donnes de chacune des colonnes de notre enregistrement. Chaque accesseur nous permet de rcuprer un
rsultat en spcifiant le numro de la colonne dsire ou bien son nom. En ce qui concerne la numrotation des
colonnes, elle ne commence pas 0 comme pour les tableaux JAVA, mais 1.
Lobjet ResultSet dispose aussi dun certain nombre de mthodes permettant de naviguer dun enregistrement
un autre. Ainsi, la mthode ResultSet.next() nous positionne sur lenregistrement suivant et nous indique sil
existe un autre enregistrement suivre ou bien si nous sommes positionns sur le dernier.
Voici un exemple de code permettant de parcourir lensemble des rsultats dune requte.

while(resultset.next()) {
System.out.println(resultset.getString(1)) ;
}

Comme vous pouvez le constater, lors de lexcution de la requte, lobjet ResultSet ne semble pas positionn
sur le premier enregistrement mais avant, dans une zone que lon nomme le GAP.

Fermeture de la connexion
Dernire tape enfin, la fermeture de la connexion votre base de donnes. Sans cela, vous risquez de maintenir
inutilement des ressources dont vous navez plus utilit. Pour fermer explicitement une connexion, utilisez la
mthode
Connexion.close().

Voici un exemple complet, bas sur la base de donnes Les comptoirs dAccess et mettant en uvre
lensemble des points voqus prcdemment.

Test.java
import java.sql.*;

public class Test {

public Test() {
try {
// Chargement du pilote JDBC
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

// URL de connexion
String url = "jdbc:odbc:comptoir";
// Connexion
Connection con = DriverManager.getConnection(url);
// Cration d'une instruction
Statement statement = con.createStatement();

// Excution d'une requete


String query = "SELECT * FROM Employs";
ResultSet resultset = statement.executeQuery(query);

// Traitement des rsultats


while(resultset.next()) {
System.out.println(resultset.getString(2) + " " + resultset.getString(3));
}

// fermeture de la connexion
con.close();
}
catch( ClassNotFoundException e) {
System.err.println("Erreur lors du chargement du pilote : " + e);
}
catch(SQLException sqle) {
System.err.print("Erreur SQL : " + sqle);
}
}

public static void main(String[] args) {


Test test = new Test();
}
}

Vous aimerez peut-être aussi