3. Présentation et utilisation du JDBC
JDBC (Java Data Base Connectivity) permet l'accès
à des bases de données créées dans des SGBD
variés, depuis un programme en Java. Il est fourni par le paquetage
(package) java.sql.
L'API JDBC est presque totalement indépendante des SGBD
(quelques méthodes ne peuvent être utilisées qu'avec
certains SGBD mais ne doivent être utilisées qu'en cas de
nécessité impérieuse pour améliorer les
performances).
JDBC : C'est un intermédiaire entre le programme java
et le SGBD choisi, il permet un accès :
Ø Local ou à distance, à une base de
données relationnelle.
Il fonctionne selon un principe Client/Serveur, où
Ø Le Client = le programme Java, et
Ø Le Serveur = la base de données.
Principe général :
Ø Le programme Java ouvre une connexion avec le
SGBD ;
Ø Il envoie des requêtes SQL ;
Ø Il récupère les
résultats ;
Ø Il met à jour la BD ;
Ø Il ferme la connexion.
Contenu de java.sql :
Ce paquetage contient un grand nombre d'interfaces et
quelques classes. Les interfaces constituent l'interface de programmation.
JDBC ne fournit pas les classes qui implantent les interfaces.
Drivers :
Pour travailler avec un SGBD, il faut disposer de classes qui
implantent les interfaces de JDBC.
Un ensemble de telles classes est désigné avec
le nom de driver JDBC. Les drivers dépendent du SGBD auquel ils
permettent d'accéder.
Architecture de JDBC :
Types de drivers :
Type 1: pont JDBC-ODBC
Type 2: driver qui fait appel à des
fonctions natives non Java (le plus souvent en langage C) de l'API du SGBD que
l'on veut utiliser.
Type 3: driver écrit
entièrement en Java qui utilise le protocole réseau du SGBD
Remarque :
Dans ce qui suit, nous donneront
des détails sur la configuration et l'utilisation du Driver
JDBC- MySQL pour une base de données sous MySQL EasyPHP 1.8
Utilisation de JDBC :
Pour le cas pratique nous utiliserons :
Ø MySQL inclus dans EasyPHP 1.8 :
Pour la création de la base de données ;
Ø Le JDK :
jdk-6u6-windows-i586-p.exe:
Pour l'execution de notre programme.
Ø Le driver JDBC :
MySQL-connector-java-3.0.15-ga :
Pour l'exploitation de la base de données.
4. La création de la base de
données MySQL:
Pour des raisons d'organisation, on se limite à une
base de données qui contient une seule table qui sera Nommée
«VolMoinsCher ». Notre base aura pour
nom « tp3bd»; pour cela, on a utilisé
EasyPHP1.8.
Voici un aperçu de ce que peut être notre
base :
Nom de la base
Nom de la table
Les champs et les
Données de la table
A partir du programme java on va accéder à la
table VolsMoinsCher en consultation a travers la requête
suivante :
`'SELECT Num_Vol, Dat_Vol, Heur_Vol, Tarif_Vol FROM
VolMoinsCher''.
Pour plus de détails concernant la création des
bases de données sous MySQL reportez-vous au Tutoriel
«EasyPHP-MySQL » qui est aussi réalisé dans le
cadre de ce TP.
1. Le JDK : reportez-vous à la
première section.
2. Le driver JDBC :
Dans ce qui suit, on va vous montrer comment configurer le
driver JDBC pour pouvoir l'utiliser dans le programme java ;
Ø Copier le fichier
« mysql-connector-java-3.0.15-ga » dans un
répertoire de votre choix
Dans notre cas, on le met dans le répertoire où
est installé le jdk :
Ø On passe à la configuration de la variable
d'environnement « ClassPath » pour pouvoir compiler les
programmes qui utilisent ce Driver.
1- Bouton droit sur poste de travail :
2 -Choisissez l'onglet Avancé :
Cette figure apparait
Propriétés
3-Puis cliquer sur variable d'environnements :
4-la fenêtre Variable d'environnements
apparait :
Variable d'environnement
du JDK.
Cliquer sur Nouveau.
5-Saisissez dans le champ
« Nom de la
variable » :ClassPath.
Dans le champ « Valeur
de la variable » on écrit :
«' . ; ` + chemin + ';' ».
· + : symbole de concaténation.
· Chemin : est le chemin vers le répertoire
''mysql-connector-java-3.0.15-ga'' concaténé avec
le nom du fichier exécutable Jar après un
antislash bien sûr.
Pour bien comprendre cette écriture procédez
comme suit :
Allez dans le répertoire jdbc ;
Entrez dans le répertoire
''mysql-connector-java-3.0.15-ga.
Copier le chemin qui apparait dans le champ adresse comme le
montre la figure suivante :
Copiez ce chemin
Dans ce répertoire vous trouverez le fichier qui a
l'indication : « Exécutable Jar File »,
copiez son nom.
En résumé : Dans notre cas
« chemin » sera égal a :
Il ne faut pas oublier l'antislash
« .; C:\Program
Files\Java\jdbc\mysql-connector-java-3.0.15-ga \
mysql-connector-java-3.0.15-ga-bin.jar ; »
Chemin vers le dossier le nom du fichier
Copiez le tout dans le champ « Valeur de la
variable »
ü puis appuyez sur ok ;
ü Appuyez une autre fois sur ok pour quitter la
fenêtre `' Variables d'environnements'';
ü Appuyez une dernière fois sur ok pour ;
quitter la fenêtre `'Propriétés
système `'.
2. Utilisation de JDBC
Il ne nous reste à présent qu'à
décrire les différents fragments du code qui nous permettent la
connexion à notre base de données.
.1 Déclaration du pilote
JDBC :
Notez l'instruction qui importe
L'API JDBC-SQL
Ø L'appel à la classe forName déclenche
un chargement dynamique du pilote.
Ø Un programme peut utiliser plusieurs pilotes, un pour
chaque base de données.
2.2 Connexion à la base de
données :
Voila le code de connexion à la base : Nom de la
base
La connexion à la base se fait à l'aide de la
méthode getConnection (p1, p2,
p3), membre de la classe DriverManager.
Elle est appelée avec trois paramètres qui sont :
Ø p1 :
L'adresse ou se trouve la base de données.
Ø p2 =
`'root `': Le nom de l'administrateur de la base.
Ø p3 : '' '' : le
mot de passe, ici notre base n'a aucun mot de passe.
2.3 Les traitement des requêtes et l'affichage
des résultats en JDBC :
Pour exécuter notre requête sur notre base de
données a partir du programme java, on fait appel à la classe
Statement, et à sa méthode membre
executeQuery (String) avec comme unique paramètre notre
requête SQL.
2.4 La classe java.sql.ResultSet
Une fois la requête est exécutée la classe
ResultSet nous offre tous les moyens qui nous permettent de
récupérer les données afin d'effectuer des
éventuels traitements sur la base de donnée.
Dans notre exemple le résultat est
récupéré dans la variable resultat, instance de la
classe ResultSet, on peut imaginer son état comme suit :
Les champs apparaissent dans un ordre
analogue à celui de la requête SQL
|
Num_Vol
|
Dat_Vol
|
Heur_Vol
|
Tarif_Vol
|
|
Resultat1
|
001/508
|
2008/06-08
|
10 :00 :00
|
11000
|
|
Resultat2
|
002/608
|
2008-06-17
|
08 :00 :00
|
12000
|
|
1 2 3 4
resultat.next()
La méthode next() permet de passer au tuple suivant (il
existe aussi prior(),first(), last(), ...).
La méthode getXxxx (int p) nous permet
l'accès à la valeur d'un champ de l'enregistrement courant dans
resultat, ce dernier étant spécifié par le
paramètre p qui est l'ordre de l'apparition du champ dans la clause
SELECT da la requête SQL. Quant à Xxxx c'est le type
Java correspondant au type du champ dans SQL.
Le tableau ci-dessus donne quelques types SQL est leurs
correspondance en Java :
SQL
|
CHAR
|
VARCHAR
|
LONG VARCHAR
|
BIT
|
INTEGER
|
REAL
|
FLOAT
|
DATE
|
TIME
|
Java
|
String
|
String
|
String
|
boolean
|
Int
|
Float
|
double
|
Date
|
Time
|
4. Fermeture de la connexion :
Une fois qu'on terminé avec la base de données
on doit fermer la connexion grâce à la méthode
close (), membre de la classe Connection.
Voici la structure générale de notre
exemple :
Essayons à présent de compiler et
d'exécuter notre programme ;
Ouvrez une fenêtre MS-DOS. Voici le résultat de
l'exécution :
Repertoire de travail
dir affiche le contenu d'un
répertoire.
Notre programme est là
Commande de compilation
Commande d'exécution
Resultat Affiché
Si notre requête SQL était :
`'SELECT Num_Vol, Dat_Vol, Heur_Vol, Tarif_Vol FROM
VolMoinsCher
WHERE VolMoinsCher.Tarif_Vol < 12''.
Le résultat sera : Exécution
précédente
Réexécution
Résultat affiché ;
Attention !!:
Veuillez respecter la hiérarchie suivante lors de
l'installation des logiciels/matériels suivants :
1. JBuilder Foundation 2005.
2. Le lecteur de carte à puce (sans insérer le
dongle)
3. GemXplore.
4. Insérer le dongle.
|