Académique Documents
Professionnel Documents
Culture Documents
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.
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
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) ;
}
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 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();
// 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);
}
}