Académique Documents
Professionnel Documents
Culture Documents
A. Nejeoui
Introduction
Toutes les applications java traitent les données d’une manière ou d’une
autre, Vous avez utilisez jusqu’à présent des types primitifs, des objets
et des tableaux. Dans ce chapitre on va explorer une autre façon de
manipuler les donner à savoir comment faire communiquer les
applications Java et les bases de données relationnelles via JDBC.
15.02.24 JDBC
JDBC
JDBC est l'acronyme de Java DataBase Connectivity et désigne une API
définie par Sun pour permettre un accès aux bases de données avec
Java.
Les classes de JDBC version 1.0 sont regroupées dans le package java.sql et
sont incluses dans le JDK à partir de sa version 1.1. La version 2.0 de
cette API est incluse dans la version 1.2 du JDK.
Pour pouvoir utiliser JDBC, il faut un pilote qui est spécifique à la base de
données à laquelle on veut accéder. Avec le JDK, Sun fournit un pilote
qui permet l'accès aux bases de données via ODBC.
15.02.24 JDBC
Le pont JDBC-ODBC
ODBC était à l'origine une couche logicielle sous WINDOWS permettant
d'accéder à différentes sources de données. Cette couche a été
implémentée également pour fonctionner sous Linux, et le logiciel en
question s'appelle unixODBC.
15.02.24 JDBC
15.02.24 JDBC
Les étapes d’accès à une BD via JDBC
Pour accéder à une base de données via JDBC, vous avez cinq étapes à suivre:
Première étape :
Préciser le type de driver que l'on veut utiliser, le Driver permet de gérer
l'accès à un type particulier de SGBD
Deuxième étape :
Récupérer un objet « Connection » en s'identifiant auprès du SGBD et en
précisant la base utilisée.
Troisième étape :
A partir de la connexion, créer un « statement » (Instruction SQL)
correspondant à une requête particulière.
Quatrième étape :
Exécuter ce statement au niveau du SGBD et traiter le type de retour.
Dernière étape
Se déconnecter de la base en fermant la connexion
15.02.24 JDBC
Les étapes d’accès à une BD via JDBC
Toutes les classes et interfaces de JDBC nécessaires pour établir une
connexion à la base de données sont dans le package java.sql. Il faut donc
l'importer dans tous les programmes devant utiliser JDBC. Il y a 4 classes
importantes : DriverManager, Connection, Statement ( et
PreparedStatement ), et ResultSet, chacune correspondant à une étape de
l'accès aux données :
Interface / Classe Role
15.02.24 JDBC
DriverManager
Les applications java utilisant le JDBC sont indépendantes du SGBDR
utilisé et du Système d’exploitation, seul le driver utilisé est
spécifique. Cette indépendance est assuré par le « gestionnaire de
pilotes » DriverManager.
Chaque SGBDR fournit le driver adéquat, les drivers ne sont pas fournis
avec JDBC.
– Une même application, si elle accepte en paramètre le nom du driver et
la localisation de la base, peut interroger une même base de données
(de même structure) supportée par des SGBDs différents : mySQL,
Access, PostgreSQL , Oracle, Dbase, …
Pour se connecter à une base de données via ODBC, il faut tout d'abord
charger le pilote JDBC-ODBC qui fait le lien entre les deux comme suit :
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
15.02.24 JDBC
DriverManager
Pour se connecter à une base en utilisant un driver spécifique, la
documentation du driver fournit le nom de la classe à utiliser. Par
exemple, si le nom de la classe est jdbc.DriverXXX, le chargement du
driver se fera avec le code suivant :
Class.forName("jdbc.DriverXXX");
Class.forName("com.mysql.jdbc.Driver"); // pour MySQL
Class.forName("postgresql.Driver");
Il n'est pas nécessaire de créer une instance de cette classe et de
l'enregistrer avec le DriverManager car l'appel à Class.forName le fait
automatiquement : ce traitement charge le pilote et créer une instance
de cette classe.
La méthode static forName() de la classe Class peut lever l'exception
java.lang.ClassNotFoundException.
15.02.24 JDBC
Connection
Pour se connecter à une base de données, il faut instancier un objet d’une
classe qui implémente l’interface Connection en lui précisant sous forme
d'URL la base à accéder. la classe DriverManager offre la méthode :
15.02.24 JDBC
Statement
Une fois la connexion établie, il est possible d'exécuter des ordres SQL.
Les requêtes d'interrogation SQL sont exécutées avec les méthodes
d'un objet Statement que l'on obtient à partir d'un objet Connection
via la méthode createStatement().
Exemple :
15.02.24 JDBC
Statement
1) ...
2) //insertion d'un enregistrement dans la table client
3) String requete = "INSERT INTO client VALUES (3,'client 3','prenom 3')";
4) try {
5) Statement stmt = con.createStatement();
6) int nbMaj = stmt.executeUpdate(requete);
7) affiche("nb mise a jour = "+nbMaj);
8) } catch (SQLException e) {
9) e.printStackTrace();
10) }
11) ...
15.02.24 JDBC
Statement
Lorsque la méthode executeUpdate() est utilisée pour exécuter un
traitement de type DDL ( Data Defiition Langage : définition de
données ) comme la création d'un table, elle retourne 0. Si la méthode
retourne 0, cela peut signifier deux choses : le traitement de mise à
jour n'a affecté aucun enregistrement ou le traitement concernait un
traitement de type DDL.
Remarque :
15.02.24 JDBC
ResultSet
Cette interface représente une abstraction d'une table qui se compose de
plusieurs enregistrements constitués de colonnes qui contiennent les
données. Les principales méthodes pour obtenir des données sont :
Méthode Role
retourne le contenu de la colonne dont le numéro est
getInt(int)
passé en paramètre sous forme d'entier.
retourne le contenu de la colonne dont le nom est passé
getInt(String)
en paramètre sous forme Chaîne de caractère.
retourne le contenu de la colonne dont le numéro est
getFloat(int)
passé en paramètre sous forme de nombre flottant.
getFloat(String)
retourne le contenu de la colonne dont le numéro est
getDate(int)
passé en paramètre sous forme de date.
getDate(String)
se déplace sur le prochain enregistrement : retourne
next()
false si la fin est atteinte
Close() ferme le ResultSet
retourne un objet ResultSetMetaData associé au
getMetaData()
ResultSet.
15.02.24 JDBC
ResultSet
La méthode next() déplace le curseur sur le prochain enregistrement. Le
curseur pointe initialement juste avant le premier enregistrement : il
est nécessaire de faire un premier appel à la méthode next() pour ce
placer sur le premier enregistrement.
15.02.24 JDBC
ResultSet
Les méthodes getXXX() permettent d'extraire les données selon leur type
spécifiée par XXX tel que getString(), getDouble(), getInteger(),
etc ... . Il existe deux formes de ces méthodes : indiquer le numéro la
colonne en paramètre (en commençant par 1) ou indiquer le nom de la
colonne en paramètre. La première méthode est plus efficace mais peut
générer plus d'erreurs à l'éxecution notamment si la structure de la
table évolue.
15.02.24 JDBC
ResultSetMetaData
La méthode getMetaData() d'un objet ResultSet retourne un objet de
typeResultSetMetaData. Cet objet permet de connaître le nombre, le nom et le
types des colonnes
Méthode Role
boolean
retourne true si la colonne est auto incrémentée
isAutoIncrement(int)
15.02.24 JDBC
Exemple : ODBC-JDBC
15.02.24 JDBC
Exemple : JDBC
15.02.24 JDBC
Exemple : ExecuteUpdate
15.02.24 JDBC
Exemple : ExecuteQuery
15.02.24 JDBC
Conclusion
15.02.24 JDBC