|
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:
| Id | name |
| 0 | King |
| 1 | Smith |
| 2 | Davis |
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.
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

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.
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
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.
|