IFT 6800 – Démonstration 6 But de la démonstration Préalables

Département d’informatique et de
recherche opérationnelle
IFT 6800 – Démonstration 6
But de la démonstration
Cette démonstration montre la communication entre un programme Java et une base de
données mysql en utilisant la technologie JDBC (Java Database Connectivity).
Préalables
Révisez les notes de cours de la séance 8 du cours, ainsi que la démonstration sur mysql.
Introduction
JDBC est une technologie qui permet à un programme Java de communiquer avec de
multiples types de bases de données. Nous verrons ici la communication avec une base de
données mysql.
Les étapes nécessaires à cette communication sont les suivantes :
1. Installation d’un pilote (« driver ») pour communiquer ;
2. Connexion à la base de données (emplacement, mot de passe, etc.) ;
3. Manipulation des données de la base ;
4. Fermeture de la connexion.
Communication
Installation d’un pilote
Cette installation a déjà été faite pour vous.
Assurez-vous d’avoir fait inclure jdk avant de commencer à travailler en Java.
Pour activer le pilote, il faut faire, dans une console Linux :
source /u/dift6800/HTML/cur/demos/6/prepjdbc
Si vous voulez faire vous-même cette configuration, il faut télécharger le pilote
Connector/J 5.0 sur le Web1 et altérer votre CLASSPATH pour l’y inclure.
Un premier exemple
Voici un premier exemple démontrant le code à écrire pour lancer une requête simple, en
effectuant les étapes 2 à 4 mentionnées plus haut. Le code est sur le site du cours.
1 http://dev.mysql.com/downloads/connector/j/5.0.html
2
1 /**
2 * Cet exemple demontre jdbc avec une base de donnes mysql.
3 *
4 * @author dift6800
5 * @date Sept. 2006
6 */
7
8 import java.sql.*;
9
10 public class Connexion
11 {
12 public static void main(String args[])
13 {
14 try
15 {
16 // on charge le pilote mysql
17 Class.forName("com.mysql.jdbc.Driver");
18 System.err.println( "Pilote chargé." );
19
20 // on ouvre une connexion vers la base
21 String protocole = "jdbc:mysql://mysql.iro.umontreal.ca:3306/";
22 String nomDeLaBase = "nom de la base";
23 String nomUtilisateur = "nom utilisateur";
24 String motDePasse = "mot de passe mysql";
25
26 Connection conn =
27 DriverManager.getConnection(protocole + nomDeLaBase,
28 nomUtilisateur,
29 motDePasse);
30
31 System.err.println("On a obtenu une connexion.");
32
33 // on cree un "statement", c'est-à-dire une instruction mysql
34 Statement stmt = conn.createStatement();
35
36 // on lance l'instruction, et on recupère le résultat
37 ResultSet rset = stmt.executeQuery("SELECT * FROM Clients");
38
39 // on peut ensuite parcourir tous les enregistrements retournés
40 System.err.println("Impression des résultats.");
41
42 while ( rset.next() ) // tant qu'il reste un enregistrement
43 {
44 // imprimer le premier champ, qui est un entier
45 System.out.println( rset.getInt(1) );
46 }
47
48 // on ferme ensuite le curseur
49 rset.close();
50 // puis l'instruction
51 stmt.close();
52 // et enfin la connexion
53 conn.close();
54
55 System.err.println("Connexions fermées.");
56 }
3
57 // cette partie plus technique intercepte certains erreurs.
58 // contentez-vous de la recopier dans vos programmes
59 catch (SQLException e)
60 {
61 System.err.println("Une erreur SQL est survenue !");
62 System.err.println("SQLException: " + e.getMessage());
63 System.err.println("SQLState: " + e.getSQLState());
64 System.err.println("VendorError: " + e.getErrorCode());
65 }
66 catch (ClassNotFoundException e)
67 {
68 System.err.println( "Avez-vous fait source... ?" );
69 System.err.println(e.getMessage());
70 e.printStackTrace();
71 }
72 }
73 }
On charge le pilote. Cette instruction ne change jamais dans le cadre de ce cours.
Pour ouvrir une connexion vers la base, il faut utiliser la méthode
getConnection, qui demande 3 arguments : l’url, le nom d’utilisateur et son mot
de passe. L’url inclut le nom de la base de données qui sera utilisée.
Pour les exercices, il vous faut compléter ces champs pour accéder à votre base de
données Surf, créée pour le devoir 1.
On crée un Statement, qui nous permet d’exécuter des instructions mysql.
Ici, on exécute une instruction mysql, exactement comme vous l’auriez entrée à
l’invite de commande de mysql. Notez cependant qu’il n’y a pas de point-virgule à
la fin de l’instruction.
L’instruction SELECT effectuée plus tôt a retourné des résultats. On peut les
consulter en utilisant un curseur, qui permet de balayer tour à tour chacun des
enregistrements retournés par l’instruction SELECT, présentés dans le même ordre
que celui vu lors de la démonstration sur mysql.
Il faut toujours fermer les curseurs, Statement et connexions ouverts dans le
programme.
Exercices
1. Téléchargez l’exemple plus haut (Connexion.java) sur le site du cours.
Modifiez-le pour qu’il puisse se connecter à votre base de données Surf, puis
compilez-le et exécutez-le.
Travailler avec Statement
Les objets Statement permettent l’exécution de requêtes SQL et d’en récupérer les
résultats via la classe ResultSet. Pour créer un Statement, on fait comme à la
4
ligne 34 dans notre exemple plus haut. Avec cet objet en main, on peut faire deux
choses : soit une requête de type SELECT, soit une mise à jour (UPDATE ou INSERT).
Type de requête
Résultat
SELECT
Un objet ResultSet
contenant les résultats de
la requête.
UPDATE ou
INSERT
Le nombre de rangées
affectées par la mise à
jour.
Rappelez-vous que tous ces objets et toutes ces méthodes sont documentés
en détail via la javadoc (la documentation Java). Vous trouverez tout ce qu’il
vous faut à l’url http://java.sun.com/j2se/1.5.0/docs/api/. Cherchez
ResultSet dans le panneau en bas à gauche et vous aurez toute la
documentation sur la classe.
Requêtes de type SELECT
Voici un parallèle entre ce que nous aurions pu faire avec l’invite de commande de
mysql et l’équivalent en code Java.
mysql
mysql> SELECT * FROM Clients;
+----------+---------+---------+------+
| noClient | nom | prenom | age |
+----------+---------+---------+------+
| 1 | Serien | Jean | 0 |
| 2 | Tell | William | 0 |
| 3 | Verse | Alain | 17 |
| 4 | Leboeuf | Marine | 0 |
+----------+---------+---------+------+
4 rows in set (0.00 sec)
Java
ResultSet rset = stmt.executeQuery("SELECT * FROM Clients");
while ( rset.next() ) // tant qu'il reste un enregistrement
{
System.out.println( rset.getInt(1) );
}
Ceci va afficher à l’écran la première colonne de la table plus haut.
1
2
3
4
Avec l’objet rset, on peut parcourir un à un chacun des enregistrements des résultats de
la requête. On fait rset.getXXXXX(n) pour lire le contenu de la colonne n. Plusieurs
5
méthodes sont à notre disposition, dépendamment du type de la colonne (le type de
champ) dans la table interrogée.
Type de champ
dans la table
mysql
Type Java du résultat
INTEGER
int
FLOAT
float
DATE
Date
VARCHAR
String
n est le numéro de la colonne où se trouve l’information que l’on recherche.
Contrairement à Java, l’index de la première colonne est 1, pas 0. C’est donc
pourquoi on fait rset.getInt(1) pour accéder au contenu de la première
colonne pour l’enregistrement courant.
À chaque fois que l’on fait rset.next(), on passe à la ligne suivante dans la table.
Cette méthode retourne également un booléen qui indique s’il reste encore des lignes à
lire. La boucle while permet donc de faire deux choses : parcourir chacun des
enregistrements du résultat de la requête et s’assurer qu’il reste un résultat à lire.
Pour afficher les noms de tous les clients, on aurait pu donc faire :
while ( rset.next() ) // tant qu'il reste un enregistrement
{
System.out.println( rset.getString(2) ); // 2e colonne = nom
}
Exercices
2. Ouvrez une connexion sur votre base Surf, dans mysql (voir démonstration 2) et
effectuez la requête suivante :
SELECT AVG(age) FROM Clients;
Ceci permet d’afficher la moyenne de la colonne noClient pour tous les clients de
la table Clients.
Créez ensuite un programme Java MoyenneAge.java qui effectue exactement la
même requête et stocke le résultat du calcul de moyenne dans une variable
moyenne, puis affiche la valeur de cette variable à l’écran.
Requêtes de type UPDATE ou INSERT
Pour modifier une table mysql, il faut utiliser la méthode
stmt.executeUpdate(String s) sur un objet stmt de type Statement.
L’argument de la méthode est l’instruction SQL, telle qu’on l’aurait saisie sur la console
mysql.
Ceci permet d’exécuter les ordres INSERT et UPDATE que nous avons vus en SQL.
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !