1 

JDBC

JDBC permet l'interaction avec une base de donnée. Il possible de se connecter à votre base, de lui envoyer des requêtes SQL, d'extraire et traiter les données qu'elle contient.
Pour cela, il faut utiliser le package java.sql qui est fournie en standard avec Java.


Les outils nécessaires

Le package java.sql

Les classes nécessaires pour agir sur votre base de donnée sont contenues dans le package java.sql. Ces dernières étant indépendantes de votre serveur de base de donnée, votre code pourra être réutiliser sous n'importe quel autre SGBD que ce soit Oracle, SQL Serveur, MySQL, etc. Les changements à effectuer seront le nom du pilote à utiliser et l'url de connexion.


Le pilote JDBC

Le pilote JDBC est une classe qui implémente l'interface java.sql.Driver des méthodes d'accès spécifiques à votre type de base. De ce fait, pour chaque SGBD il faut un pilote JDBC spécifique, cependant Sun fournit un pilote JDBC-ODBC. Celui-ci est un pont avec un pilote ODBC qui exécutera lui-même les requêtes. Dans ce cas vous devez créer un lien ODBC avec votre base de donnée. Nous verrons comment faire dans un exemple avec une base Access.


Exemple

Dans notre exemple nous allons utiliser une base de données MySQL avec la table personne dont voici les données:

Idname
0King
1Smith
2Davis

Il est indispensable de récupérer le driver MySQL que vous pouvez télécharger à l'adresse http://www.mysql.com/downloads/api-jdbc-stable.html. Ce fichier zip contient plusieurs jar dont mysql-connector-java-3.0.7-stable-bin.jar, la version actuelle dont nous nous servirons est la 3.0.7. Il faudra ajouter ce jar à notre CLASSPATH.
Nous allons voir comment faire sous Eclipse :
Nous avons crée un dossier dbctut sur notre disque contenant le jar.
Sous Eclipse, on crée un nouveau projet appelé jdbctut en spécifiant comme répertoire celui que l'on vient de créer.
A la création du nouveau projet, sur la fenêtre de "Java settings", nous irons sur "Librairies", "Add JARs" et cocherons notre jar.

import-jar.jpg

Dans votre code source, il faudra commencer par charger votre pilote. Pour cela, il faudra spécifier le nom de classe à utiliser comme pilote. Ici ce sera "com.mysql.jdbc.Driver". Le nom de la classe est spécifié dans la documentation fournie avec le package du pilote.

Il faut utiliser la méthode statique Class.forName("nom_pilote") pour instancier la classe. Cette méthode renvoie une exception ClassNotFoundException qu'il faudra récupérer.

try {
    Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e) {
    System.out.println("Erreur au chargement du driver : " + e.toString());
}

Il vous est alors possible d'établir la connexion en créant un objet de la classe Connection. Nous allons utiliser pour cela la méthode statique getConnection() du DriverManager. Cette méthode nécessite comme paramètre trois String spécifiant l'URL de la base de donnée, un nom d'utilisateur capable de se connecter, ainsi que son mot de passe. L'URL nécessaire varie en fonction de la base utilisée. Pour une base MySql l'url est "jdbc:mysql://host/base".

try {
    Connection connection = DriverManager.getConnecton("jdbc:mysql:XXX","XXX","XXX");
}
catch (SQLException s) {
    System.out.println("Erreur à l'établissement de la connexion : " + s.toString());
}

Il est alors possible de communiquer avec la base.
Nous allons créer un Statement qui permettera d'exécuter nos requêtes SQL. C'est la méthode createStatement de notre objet connection qui nous renverra un Statement.
Les méthodes les plus utiles sont:

  • executeQuery("requete_sql") qui nous renverra un ResultSet contenant les données extraites de la base à traiter.
  • executeUpdate("requete_sql") qui sera utilisée pour les requêtes de type insert, delete, update et qui renvoie un int correspondant au nombre de lignes affectées par la requête.

Voici un exemple d'insertion

source1.jpg

Nous avons inséré une nouvelle ligne dans la table personne. Le résultat devrait être :
   On ouvre une connexion
   1 ligne(s) affectée(s)

Exemple de récupération de données. Ici nous n'avons changé que la méthode main qui va affiche le contenu de notre table.

source2.jpg

Le résultat doit être :
   On ouvre une connexion
   id = 0 , king
   id = 1 , smith
   id = 2 , jones
   id = 3 , Martin

Dans cet exemple nous avons utilisé diverses méthodes.
Nous avons utilisé la méthode next() qui sert à se déplacer vers la ligne suivante. Il faut au moins l'appelé une fois pour ce positionner sur la première ligne. S'il n'y a plus de résultat la méthode renvoie false.
Il existe plusieurs méthodes "get" qui renvoie les données contenues dans une colonne. Les paramètres à spécifier sont soit un int correspondant au numéro de la colonne (la première vaut 1), soit une String du nom de la colonne. Les valeurs renvoyer sont dépendantes de la méthode appelée selon le type de donnée contenues dans la base.
Pour notre exemple nous avons utilisé les méthodes getInt() pour récupérer l'Id des personnes et getString() pour récupérer leurs noms.


Utilisation de JDBC-ODBC

Nous disposons d'une base Access nommé bd1.mdb à la racine de notre disque. Pour plus de simplicité cette base contient la même table personne que celle sous MySQL. Si nous voulons utiliser le driver de Sun il faut créer un pont ODBC.
Pour cela, allez dans le gestionnaire " source de données (ODBC) " des outils d'administrations

odbc.jpg

Allez sous l'onglet " Sources de données système " puis " Ajouter¿ " dans la liste de pilote ODBC choisissez Microsoft Access Driver (*.mdb). Il faut donner un nom à notre source de donnée (ex : mydb). Cliquez sur " Sélectionner¿ " et là spécifier votre base access.
Il ne vous reste alors plus qu'à modifier votre code pour qu'il utilise le bon driver et la nouvelle url.

Dans notre exemple précédent, il suffit de changer la String driver par :
private static final String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

et la String url par:
private static final String url = "jdbc:odbc:mydb"
Ce sont les seules modifications nécessaires.



Vous pouvez dès maintenant développer des applications qui interagissent avec une base de donnée.
Pour plus d'informations sur les Classes fournies par le package java.sql, je vous invite à consulter la javadoc de Sun dans la section java.sql.
La plupart des pilotes que vous trouverez disposent de leur propre package sql. Ces derniers contiennent des classes et méthodes spécifiques à la base de donnée. Ils offrent plus de fonctionnalités et sont souvent plus puissants car adaptés à la base de donnée. Toutefois, je conseille d'utiliser le package standard fournit avec le JDK pour la pérennité de votre code. En effet, si vous décidez de changer de SGBD vous n'aurez qu'à changer le pilote chargé et votre connexion. Dans le cas contraire vous aurez sûrement de nombreuses modifications à effectuer.


1 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Evènements
Java Sun Net Talk LIVE CHAT le 2 Avril à 16h303/29/08
SolarisSunDécouvrez les nouveaux Sun Fire sous Intel10/11/07
JavaValtech Days10/9/07
JavaApacheCon du 1 au 4 mai à Amsterdam2/13/07

Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Actualités
SunProjet Kenai: une nouvelle forge open source10/3/08
SunSun Microsystems en forme !8/4/08
SunOpenDS un ldap 100% java7/24/08
SunSun et Fujitsu annoncent un nouveau Sparc647/16/08
SunVisualVM, un outil de surveillance des applications Java7/10/08

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée