Initiation

publicité
����������
������������������
����������
���
�
��������������������������
© Groupe Eyrolles, 2004,
ISBN : 2-212-11532-6
3646_09_Ch05 Page 186 Mercredi, 4. août 2004 1:49 13
> Apogee FrameMaker Couleur
partie n° 2
Concepts avancés
Figure 5-3
La table Livres enregistrée sous MySQL.
Enrichir une base de données avec JSP
Pour enregistrer les données à l’intérieur d’une table, il « suffit » d’utiliser la commande
INSERT en y plaçant les valeurs relatives aux attributs définis dans la table.
Nous imaginons maintenant, pour reprendre notre exemple, qu’un fonds de bibliothèque (c’està-dire le nombre de livres) correspond en moyenne à 150 000 livres, que le nombre d’adhérents
peut atteindre les 20 000 et qu’en moyenne 500 livres sont empruntés par jour. Pour enregistrer
186
© Éditions Eyrolles
3646_09_Ch05 Page 187 Mercredi, 4. août 2004 1:49 13
> Apogee FrameMaker Couleur
chapitre n° 5
Interroger une base de données
l’ensemble de ces données, il nous faut taper 295 000 fois la commande INSERT
(150 000 livres + 20 000 lecteurs + 500 livres × 250 jours), en faisant bien attention aux virgules, parenthèses et autres guillemets. Ce travail est démesuré et ne peut être réalisé tel quel.
Un autre exemple, très parlant, est celui des sites éditoriaux (journaux en ligne). Chaque jour,
les gros titres, les articles et les photos sont modifiés. Chaque jour, les précédents titres, articles et photos sont archivés. Toutes ces informations sont bien entendues enregistrées dans une
base de données qui permet la mise en ligne automatique de l’information. Compte tenu du
nombre d’articles et des délais très courts pour les mises à jour, l’enrichissement de ce type de
base de données ne peut être effectué à l’aide de la simple commande INSERT.
Un composant JavaBean communique avec MySQL
En réalité, les commandes CREATE, INSERT, SELECT, etc. sont indispensables pour les
concepteurs (éditeurs ou administrateurs) de bases de données mais elles ne le sont pas pour
les utilisateurs finaux.
Pour enrichir une base de données, il convient de construire une interface simple et conviviale,
proche du mode de fonctionnement de l’utilisateur. Cette interface est constituée, pour l’essentiel, de formulaires dont les champs à remplir correspondent aux différents attributs des tables
créées par le concepteur de la base de données. Après validation des données saisies via le formulaire, ces dernières sont vérifiées puis enregistrées dans la base de données.
Architecture 3-tiers
L’enregistrement de données dans une table s’effectue selon le modèle 3-tiers, présenté à la
figure 5-4.
Figure 5-4
Architecture 3-tiers.
Tiers est un terme anglais qui se traduit par le mot « étage » et non par « un tiers ».
© Éditions Eyrolles
187
3646_09_Ch05 Page 188 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
Les données sont saisies par l’utilisateur grâce à un formulaire HTML/JSP (premier étage,
figure 5-4-➊). Lorsque l’utilisateur valide le formulaire, les données sont transmises au serveur Tomcat (deuxième étage, figure 5-4-➋) à l’aide d’une requête JSP. Les données sont alors
traitées par un composant JavaBean. Après vérification de la validité des données, un composant JavaBean se connecte à la base de données et lui transmet les données (troisième étage,
figure 5-4-➌) pour enregistrement.
Ainsi, de la saisie à l’aide de formulaires HTML à l’enregistrement dans une base de données
MySQL, les données réalisent un parcours électronique qui nécessite la mise en place de
connexions permettant la transformation et la transmission des données d’un environnement à
l’autre. En effet, chaque environnement (JSP, JavaBean, MySQL) code et interprète les données d’une façon qui lui est propre.
L’étude du chapitre 4 « Utiliser un objet Java dans un script » montre comment établir une
communication entre un script JSP et un composant JavaBean. Nous allons maintenant examiner comment les informations stockées dans un composant sont transmises à une base de données MySQL.
Plusieurs étapes sont nécessaires pour réaliser cette transmission, elles se résument de la façon
suivante :
1. Reconnaissance de la base de données et création d’un objet Connection.
2. Mise en place d’un tube de communication à partir de l’objet Connection.
3. Transmission de requêtes entre un JSP et une base de données via le tube.
Reconnaître la base de données et créer un objet Connection
Pour qu’un composant JavaBean interroge une base de données ou lui transmette une information, il doit au préalable se connecter à la base de données. Pour réaliser cette connexion, le
composant doit connaître le moyen de communiquer avec la base de données. Il lui faut pour
cela faire appel à des fonctions spécifiques qui ont été écrites par les concepteurs de la base de
données.
Ces fonctions spécifiques sont rassemblées dans une bibliothèque de programmes appelée
« pilote » (en anglais, driver). Il existe autant de pilotes que de types de bases de données.
Pour notre cas, nous utilisons les pilotes fournis par MySQL et enregistrés dans la bibliothèque mysql-connector-java-3.0.11-stable-bin.jar.
L’installation du pilote mysql-connector-java est décrite en annexe « Contenu et exploitation du CD-Rom » de cet ouvrage, à la section « Autres installations ».
Création du composant JavaBean DBConnexion
Notre objectif est d’écrire un composant JavaBean nommé DBConnexion qui se connecte à
une base de données MySQL. Nous devons pour cela définir les propriétés et les méthodes uti-
188
© Éditions Eyrolles
3646_09_Ch05 Page 189 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
les à la mise en place de cette connexion. À cette fin, examinons étape par étape comment réaliser une telle connexion.
Avant tout, nous devons charger en mémoire le pilote que nous souhaitons utiliser pour établir
la connexion. Par défaut, pour des raisons d’optimisation, aucun pilote de connexion à une
base de données n’est chargé en mémoire de la JVM. Pour réaliser cette opération, il convient
d’utiliser l’instruction :
Class.forName("com.mysql.jdbc.Driver") ;
Grâce à cette instruction, le pilote (ou driver) JDBC (Java DataBase Connector) relatif à la
base de données MySQL est chargé en mémoire.
Ensuite, pour réaliser une connexion, le pilote propose la méthode getConnection() dont
la syntaxe d’utilisation se présente ainsi :
Connection cnx = DriverManager.getConnection(urlJdbc);
Examinons chacun des termes de cette instruction.
La méthode getConnection() est appelée via la classe DriverManager. Cette dernière
regroupe toutes les méthodes permettant la détection des pilotes appropriés pour établir une
connexion.
La méthode getConnection() demande qu’on lui indique en paramètre où se trouve la
base de données, ainsi que le nom d’utilisateur et son mot de passe. Cette information est stockée sous la forme d’une chaîne de caractères nommée urlJdbc. La façon dont est construite
cette chaîne est décrite ci-après.
Lorsque la connexion est enfin réalisée, la méthode getConnection() retourne en résultat
une valeur de type Connection, enregistrée dans un objet appelé cnx. Cet objet est essentiel, puisque c’est ensuite à travers lui que va s’effectuer la communication entre JSP et
MySQL.
Construction de l’URL Jdbc
Pour établir une connexion, il est nécessaire d’indiquer les informations telles que le protocole
utilisé, le lieu où se trouve la base de données, le nom d’utilisateur et son mot de passe.
Le protocole ainsi que le lieu où se trouve la base de données s’écrivent sous la forme d’une
URL (Uniform Resource Locator), appelée communément URL Jdbc. Elle s’écrit comme
suit :
"jdbc:mysql://" + hostname + ":" + port + "/" + nomDeLaBase ;
où :
●
hostname est une variable de type String qui contient soit le nom réseau de la machine
hébergeant la base de données, soit l’adresse IP de cette machine.
●
port est une variable de type String qui contient le numéro de port d’écoute du serveur
MySQL.
© Éditions Eyrolles
189
3646_09_Ch05 Page 190 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
nomDeLaBase est une variable de type String qui contient le nom de la base de don-
●
nées sur le serveur.
L’ensemble de ces informations est stocké à l’intérieur d’une chaîne de caractères, nommée
urlJdbc, comme suit :
urlJdbc = "jdbc:mysql://" + hostname + ":" + port + "/" +
nomDeLaBase ;
Le nom d’utilisateur ainsi que le mot de passe sont nécessaires à la mise en place d’une connexion. En effet, il existe différents types d’utilisateurs allant du simple consultant à l’administrateur en passant par le gestionnaire. Pour distinguer chaque utilisateur et déterminer son
droit d’accès, l’administrateur de la base crée des comptes utilisateur caractérisés par un login
et un mot de passe.
Le login et le mot de passe sont envoyés lors de la demande de connexion, en tant que paramètres de l’URL Jdbc, à laquelle ils sont ajoutés de la façon suivante :
urlJdbc = urlJdbc + "?user=" + login + "&password=" + password ;
où :
login correspond au nom du compte de l’utilisateur désirant travailler sur la base de don-
●
nées.
password correspond au mot de passe associé au compte utilisateur.
●
Toutes ces données (URL, compte utilisateur et mot de passe) sont établies par l’administrateur de la base de données, lors de sa mise en place. Pour notre cas, reportez-vous à la
procédure d’installation de MySQL en annexe « Contenu et exploitation du CD-Rom », à la
section « Installation de MySQL sous Windows ou Linux ».
La mise en place de l’URL s’effectue par l’intermédiaire d’une méthode métier dont la structure est la suivante :
private String construireUrlJdbc() {
String urlJdbc ;
urlJdbc = "jdbc:mysql://" + hostname + ":" + port + "/" +
nomDeLaBase ;
urlJdbc = urlJdbc + "?user=" + login + "&password=" + password ;
return urlJdbc ;
}
Cette méthode construit et renvoie l’URL Jdbc à partir des cinq informations nécessaires à la
connexion host, port, nomDeLaBase, login et passwd. Ces valeurs sont définies comme
propriétés du composant JavaBean.
190
© Éditions Eyrolles
3646_09_Ch05 Page 191 Mercredi, 4. août 2004 1:49 13
> Apogee FrameMaker Couleur
chapitre n° 5
Interroger une base de données
Une méthode pour établir la connexion
Examinons maintenant l’écriture de la méthode etablirConnexion() qui permet la
connexion avec la base de données :
private boolean etablirConnexion() {
boolean statusConnexion = false;
try {
Class.forName("com.mysql.jdbc.Driver");
urlJdbc = construireUrlJdbc();
cnx = DriverManager.getConnection(urlJdbc);
statusConnexion = true;
} catch ( Exception e ) {
statusConnexion = false;
System.out.println(e);
}
return statusConnexion;
}
La méthode reprend les méthodes Class.forName(), construireUrlJdbc() et
DriverManager.getConnection() étudiées précédemment. Ces méthodes sont
insérées au sein d’une structure try–catch pour gérer les erreurs qui pourraient se produire
lors de la connexion.
En effet, la structure try-catch permet de « lever » les exceptions. Si une erreur se produit
lors de l’exécution des instructions contenues dans la partie try, alors les instructions situées
dans la partie catch sont exécutées.
Figure 5-5
© Éditions Eyrolles
Après validation du formulaire ➊, le serveur charge le pilote et se connecte ➋.
En retour, il fournit un numéro de connexion ➌.
191
3646_09_Ch05 Page 192 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
Ainsi pour notre exemple, dans la structure try, la valeur retournée par la méthode
getConnection() est affectée à l’objet cnx de type Connection et la variable booléenne
statusConnexion prend la valeur true. En cas d’erreur lors de la connexion, le bloc catch
met à false la variable booléenne statusConnexion et écrit le type d’erreur dans le fichier
C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\stderr
(Windows) ou /usr/local/jakarta-tomcat-5.0.25/logs/stderr (Linux).
Propriétés et méthodes d’accès du composant DBConnexion
L’étude des méthodes métier construireUrlJdbc() et etablirConnexion() montre
qu’il est nécessaire de définir les variables login, password, hostname, port,
nomDeLaBase et cnx comme propriétés du composant DBConnexion. La déclaration des
propriétés s’effectue de la façon suivante :
private
private
private
private
private
private
String login ;
String password ;
String hostname;
String port;
String nomDeLaBase;
Connection cnx;
Pour se connecter, le système et l’utilisateur doivent transmettre, par l’intermédiaire d’un JSP,
les valeurs relatives aux propriétés login, password, hostname, port, nomDeLaBase.
Chacune de ces propriétés doit donc être accessible en écriture. Les propriétés étant définies
pour des raisons de sécurité en mode private, l’accès aux propriétés s’effectue par l’intermédiaire des méthodes d’accès suivantes :
public void setLogin (String valeur) {
login = valeur ;
}
public void setPassword (String valeur) {
password = valeur ;
}
public void setHostname (String valeur) {
hostname = valeur ;
}
public void setPort (String valeur) {
port = valeur ;
}
public void setNomDeLaBase (String valeur) {
nomDeLaBase = valeur ;
}
192
© Éditions Eyrolles
3646_09_Ch05 Page 193 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
Les méthodes d’accès en écriture ou en lecture sont étudiées au chapitre 4. « Utiliser un
objet Java dans un script », section « Qu’est ce qu’un JavaBean ? ».
À l’inverse, la propriété cnx est créée par le composant DBConnexion. Elle doit être transmise aux composants qui s’occupent de gérer les requêtes vers la base de données. Cette propriété doit donc être accessible en lecture, comme le montre la méthode suivante :
public Connection getCnx() {
if (etablirConnexion()) {
return cnx;
} else {
return null;
}
}
Afin de gérer les erreurs, la méthode getCnx() renvoie une valeur null si la connexion ne
peut s’établir. Pour cela, elle teste le résultat retourné par la méthode etablir
Connexion().
Pour que le type Connection et que les méthodes Class.forName() et getConnection()
soient reconnus par le compilateur Java, il convient de placer, au début du composant
DBConnexion, l’instruction import java.sql.* ;.
Le code source complet du composant DBConnexion
/*
Fichier : DBConnexion.java
Class : DBConnexion
Package : exemples.ch5
*/
package Exemples.Ch5 ;
import java.io.Serializable ;
import java.sql.*;
public class DBConnexion implements java.io.Serializable {
//Définition des propriétés
private String login;
private String password ;
private String hostname;
private String port;
private String nomDeLaBase;
© Éditions Eyrolles
193
3646_09_Ch05 Page 194 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
private Connection cnx;
// Méthodes d’accès en écriture
public void setLogin (String valeur) {
login = valeur ;
}
public void setPassword (String valeur) {
password = valeur ;
}
public void setHostname (String valeur) {
hostname = valeur ;
}
public void setPort (String valeur) {
port = valeur ;
}
public void setNomDeLaBase (String valeur) {
nomDeLaBase = valeur ;
}
// Méthodes d’accès en lecture
public Connection getCnx() {
if (etablirConnexion()) {
return cnx;
} else {
return null;
}
}
// Méthodes invisibles (métier)
private String construireUrlJdbc() {
String urlJdbc ;
urlJdbc = "jdbc:mysql://"+hostname+":" + port + "/" +
nomDeLaBase ;
urlJdbc = urlJdbc + "?user=" + login + "&password=" +
password ;
return urlJdbc ;
}
194
© Éditions Eyrolles
3646_09_Ch05 Page 195 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
private boolean etablirConnexion() {
boolean statusConnexion = false;
try {
Class.forName("com.mysql.jdbc.Driver");
urlJdbc=construireUrlJdbc();
cnx=DriverManager.getConnection(urlJdbc);
statusConnexion = true;
} catch ( Exception e ) {
statusConnexion = false;
System.out.println(e);
}
return statusConnexion;
}
}
Mise en place d’un tube de communication
Une fois la connexion établie, il s’agit d’envoyer des requêtes vers la base de données. Les
requêtes sont transmises à l’aide d’un objet de liaison Java qui sait communiquer du monde
JSP vers le monde MySQL et inversement.
Concrètement, la mise en place de cette liaison s’effectue à travers un objet de type
Statement. La classe Statement est une interface définie par Java.
Une interface est une classe particulière qui définit les différents types de comportements sans
en décrire réellement les actions. Les méthodes définies par un Statement ne peuvent être
prédéfinies par le langage Java. Une requête, c’est-à-dire un comportement associé à un
Statement, ne peut être décrite que par le programmeur en fonction de ce que l’application
doit réaliser.
Un objet de type Statement est comparable à un tube (ou, dans le jargon informatique, pipeline). Ce tube est bidirectionnel, il permet de communiquer dans les deux sens. L’application
JSP envoie une requête vers la base de données, via le tube. En retour, la base transmet le ou
les résultats par le même canal.
Pour créer un objet Statement, il suffit de faire appel à la méthode createStatement()
définie à l’intérieur de la classe Connection. Lorsque cet objet est créé, le tube de communication reste ouvert tant que l’objet est chargé en mémoire.
© Éditions Eyrolles
195
3646_09_Ch05 Page 196 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
Figure 5-6
Une fois la connexion établie ➌, le JSP demande la création d’une communication ➍
à l’aide d’un objet de type Statement➎.
Création du composant JavaBean DBLien
Examinons à travers un exemple comment créer et gérer un objet de type Statement. Pour
cela, nous allons créer un composant JavaBean nommé DBLien.
Les deux JavaBeans DBConnexion et DBLien peuvent être réunis en un seul JavaBean qui
gère tous les aspects relatifs à la mise en place d’une communication JSP/base de données.
Pour des raisons pédagogiques, nous avons préféré les présenter séparément.
La méthode métier du JavaBean DBLien fait appel à la méthode createStatement() de
la façon suivante :
private boolean construireStatement (Connection cnx) {
boolean statusStatement = false;
try {
lien=cnx.createStatement();
statusStatement = true ;
} catch ( Exception e ) {
statusStatement = false;
System.out.println(e);
}
return statusStatement;
}
La méthode construireStatement() appelle la méthode createStatement() à travers l’objet cnx de type Connection. Cet objet est créé par le composant DBConnexion.
La méthode createStatement() détecte les erreurs éventuelles de communication, il
convient donc de l’insérer dans une structure try-catch. Si aucune erreur n’est détectée, le
196
© Éditions Eyrolles
3646_09_Ch05 Page 197 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
résultat de l’appel de createStatement() est stocké dans un objet nommé lien de type
Statement et la variable booléenne statusStatement prend la valeur true. En cas
d’erreur lors de la création du tube de communication, le bloc catch met à false la variable
booléenne statusStatement et écrit le type d’erreur dans le fichier C:\Program
Files\Apache Software Foundation\Tomcat 5.0\logs\stderr (Windows) ou
/usr/local/jakarta-tomcat-5.0.25/logs/stderr (Linux).
Propriétés et méthodes d’accès du composant DBLien
L’objet lien est défini comme étant une propriété du composant DBLien.
La propriété lien est créée par le composant DBLien. Elle doit être transmise aux composants qui s’occupent de gérer les requêtes vers la base de données. Cette propriété doit donc
être accessible en lecture, comme le montre la méthode suivante :
public Statement getLien(Connection cnx) {
if (construitStatement(cnx)) {
return lien;
} else {
return null;
}
}
Nous voyons ici que la méthode getLien() retourne l’objet lien ou l’objet null en fonction du retour de la méthode métier construireStatement(). Elle prend également en
paramètre l’objet cnx de façon à ce que ce dernier, créé par le composant DBConnexion, soit
transmis via le JSP au composant DBLien.
Le code source complet
/*
Fichier : DBLien.java
Class : DBLien
Package : exemples.ch5
*/
package Exemples.Ch5 ;
import java.io.Serializable ;
import java.sql.*;
public class DBLien implements java.io.Serializable {
//Définition des propriétés
private Statement lien = null;
© Éditions Eyrolles
197
3646_09_Ch05 Page 198 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
// Méthodes d’accès en lecture
public Statement getLien(Connection cnx) {
if (construireStatement(cnx)) {
return lien;
} else {
return null;
}
}
// Méthodes invisibles
private boolean construireStatement (Connection cnx) {
boolean statusStatement = false;
try {
lien=cnx.createStatement();
statusStatement = true ;
} catch ( Exception e ) {
statusStatement = false;
System.out.println(e);
}
return statusStatement;
}
}
Transmission de requêtes entre un JSP et une base de données
Les deux composants DBConnexion et DBLien sont maintenant à notre disposition pour
mettre en relation l’application JSP avec la base de données. La page JSP doit donc créer deux
objets de type DBConnexion et DBLien et attribuer les valeurs appropriées aux différentes
propriétés. Pour établir la connexion, le JSP doit également faire appel aux différentes méthodes d’accès définies au sein des composants.
Création et initialisation des objets DBConnexion et DBLien
En tout premier lieu, la page JSP doit importer les deux classes nécessaires à la manipulation
d’un objet Connection et d’un objet Statement :
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
Ensuite vient la création des deux objets correspondant aux deux composants. Dans un premier temps, les objets dbcnx et dblien sont créés grâce aux instructions :
<!--// DBConnexion Bean-->
<jsp:useBean id="dbcnx" class="Exemples.Ch5.DBConnexion" />
198
© Éditions Eyrolles
3646_09_Ch05 Page 199 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
<!--// DBLien Bean -->
<jsp:useBean id="dblien" class="Exemples.Ch5.DBLien" />
Cela fait, il convient d’initialiser l’objet dbcnx de façon à mettre en place la connexion. Cette
initialisation s’effectue grâce aux instructions :
<!--// Code d’initialisation //-->
<jsp:setProperty name="dbcnx" property="login" value="jspuser" />
<jsp:setProperty name="dbcnx" property="password"
value="jspuser" />
<jsp:setProperty name="dbcnx" property="hostname"
value="localhost" />
<jsp:setProperty name="dbcnx" property="port" value="3306" />
<jsp:setProperty name="dbcnx" property="nomDeLaBase"
value="livrejsp"/>
Pour simplifier, nous avons choisi d’initialiser les propriétés de l’objet dbcnx à l’intérieur
même du JSP. L’utilisateur qui se connecte a pour login et pour mot de passe jspuser. Pour
autoriser la connexion à d’autres utilisateurs, vous devez créer un formulaire de saisie du login
et du mot de passe avant toute initialisation.
Le nom des utilisateurs et celui de la base de données sont définis par l’administrateur de
la base de données lors de sa mise en place. Pour notre cas, reportez-vous à la procédure
d’installation de MySQL décrite en annexe « Contenu et exploitation du CD-Rom », à la
section « La création des bases système MySQL ».
La connexion s’établit sur le port 3306 en local (localhost) sur la base de données portant
le nom livrejsp.
Pour l’objet dblien, aucune propriété n’est à initialiser, la seule propriété lien étant initialisée
par le composant lui-même.
Accéder aux propriétés des objets DBConnexion et DBLien
Après création et initialisation, la connexion s’établit à travers l’objet dbcnx. Le résultat de
cette connexion est enregistré dans l’objet cnx, comme le montrent les instructions suivantes :
Connection cnx = dbcnx.getCnx();
if (cnx == null) {
out.println("<font color=red>Connexion impossible : " + cnx +
"</font>");
} else {
out.println("<font color=green>Connexion établie : " + cnx +
"</font>");
}
© Éditions Eyrolles
199
3646_09_Ch05 Page 200 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
Lors de l’exécution de ces instructions, le serveur envoie sur le flux HTTP, grâce à la méthode
out.println(), un message confirmant ou infirmant l’obtention de la connexion.
Pour finir, la mise en place du tube de communication s’effectue grâce aux instructions
suivantes :
Statement lien = dblien.getLien(cnx);
if (lien == null) {
out.println("<font color=red>KO : " + lien + "</font>");
} else {
out.println("<font color=green>OK : " + lien + "</font>");
}
L’objet lien matérialise le tube de communication. Il est créé par l’intermédiaire de l’objet
dblien et à l’aide de l’objet cnx. Comme précédemment, lors de l’exécution de ces instructions, le serveur envoie sur le flux HTTP un message confirmant ou infirmant la mise en place
du tube de communication.
Le code source complet
Les instructions relatives à la connexion et à la mise en place du tube de communication sont
écrites en Java. Elles sont placées entre des balises <% et %> (zones grisées).
<!-# Fichier : connexionLien.jsp
# Description :
#
Se connecte et crée un tube de communication
#
avec la base de données livrejsp
#
login et mot de passe par défaut : jspuser
# JavaBeans : DBConnexion, DBLien
-->
<!-- La page JSP manipule des objets de type Connection et
Statement -->
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<!--// DBConnexion Bean-->
<jsp:useBean id="dbcnx" class="Exemples.Ch5.DBConnexion">
<!--// Code d’initialisation //-->
<jsp:setProperty name= "dbcnx" property="login" value="jspuser"/>
<jsp:setProperty name= "dbcnx" property="password"
value="jspuser"/>
<jsp:setProperty name= "dbcnx" property="hostname"
value="localhost"/>
<jsp:setProperty name= "dbcnx" property="port" value="3306"/>
200
© Éditions Eyrolles
3646_09_Ch05 Page 201 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
<jsp:setProperty name= "dbcnx" property="nomDeLaBase"
value="livrejsp"/>
</jsp:useBean>
<!--// DBLien Bean -->
<jsp:useBean id="dblien" class="Exemples.Ch5.DBLien"/>
<html>
<body>
<table width=700><tr><td>
<h1><font face=arial>Sélection sur la table Livres</h1>
<h3><font face=arial>La connexion avec la base de données</h3>
<font face=arial size=2 color=black>1ère étape : Création d’une
connexion vers la base de données :<br>
<%
// Récupération de la connexion
Connection cnx = dbcnx.getCnx();
if (cnx == null) {
out.println("<font color=red>Connexion impossible : " + cnx +
"</font>");
} else {
out.println("<font color=green>Connexion établie : " + cnx +
"</font>");
}
%>
<br><br>
<font face=arial size=2 color=black>2ème étape : Création d’un
tube de communication :<br>
<%
// Création du tube de communication avec la base de données
Statement lien = dblien.getLien(cnx);
if (lien == null) {
out.println("<font color=red>Communication impossible : " +
lien + "</font>");
} else {
out.println("<font color=green>Communication établie : " +
lien + "</font>");
}
%>
© Éditions Eyrolles
201
3646_09_Ch05 Page 202 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
</td></tr></table>
</body>
</html>
La figure 5-7 présente le résultat de l’exécution du programme connexionLien.jsp.
Figure 5-7
Le programme connexionLien.jsp affiche les différentes étapes nécessaires
à la connexion d’une base de données MySQL.
Consulter ou modifier une base de données ?
Après la connexion et la mise en place d’un tube de communication, nous pouvons effectuer
différents traitements sur la base de données. Il existe deux types de traitement :
●
la consultation, qui permet de savoir si, par exemple, un élément particulier est enregistré
dans la base ;
●
la modification, pour insérer, mettre à jour ou supprimer un élément de la base.
JSP propose deux méthodes pour réaliser ces traitements, executeQuery() et execute
Update().
Ces deux méthodes s’exécutent à travers le tube de communication Statement créé dans la
section précédente (voir figure 5-8).
Modifier la base de données
Pour modifier le contenu d’une base de données, il convient d’utiliser la méthode execute
Update(). Grâce à cette dernière, les requêtes MySQL INSERT, UPDATE et DELETE sont
exécutables à l’intérieur d’un programme JSP.
La requête INSERT permet l’insertion de lignes supplémentaires dans une ou plusieurs tables,
alors que la requête UPDATE autorise la mise à jour d’une ligne d’une table, et que la requête
DELETE est utilisée pour supprimer une ou plusieurs lignes d’une table de la base de données.
202
© Éditions Eyrolles
3646_09_Ch05 Page 203 Mercredi, 4. août 2004 1:49 13
chapitre n° 5
> Apogee FrameMaker Couleur
Interroger une base de données
Figure 5-8 Lorsque le tube de communication est mis en place, les requêtes sont transmises
à la base de données ➎ et, s’il y a un résultat, celui-ci est retourné au navigateur ➏.
La syntaxe d’utilisation de la méthode executeUpdate().
est la suivante :
int valeur = lien.executeUpdate(commande);
où :
●
lien est un objet de type Statement et représente le tube de communication décrit
précédemment. En appliquant la méthode à l’objet lien, nous sommes sûrs que la
commande est exécutée à l’intérieur du tube de communication.
●
commande est une chaîne de caractères qui contient la commande MySQL d’insertion, de
mise à jour ou de suppression.
●
valeur est la valeur de retour de la méthode. Elle représente le nombre de lignes insérées,
mises à jour ou supprimées, en fonction de la commande exécutée.
Exemple : insertion d’un nouveau livre dans la table Livres
L’objectif est ici d’insérer un nouveau livre dans la table Livres. Pour cela, nous devons
réaliser les cinq étapes suivantes (voir figure 5-9) :
➊ Mise en page d’un formulaire contenant les attributs de la table Livres.
➋ Validation des données à insérer dans la base de données à l’aide d’un composant Java
Bean.
➌ Récupération des données transmises par le composant JavaBean.
➍ Connexion à la base de données et ouverture d’un tube de communication.
➎ Insertion des données à l’aide de la commande executeQuery().
Les quatre premières étapes ont déjà été réalisées, soit au cours du chapitre 4, soit lors de la
section précédente de ce chapitre. Notre tâche consiste donc à récupérer tous les fichiers utiles
à la réalisation de notre application et à les assembler correctement (voir figure 5-9).
© Éditions Eyrolles
203
3646_09_Ch05 Page 204 Mercredi, 4. août 2004 1:49 13
partie n° 2
> Apogee FrameMaker Couleur
Concepts avancés
Figure 5-9
Les cinq étapes permettant d’insérer un livre dans la base de données.
L’étape 1 a pour finalité de construire un formulaire HTML qui présente les différents champs
de saisie correspondant aux champs de la table Livres, comme le montre la figure 5-10.
Figure 5-10
204
Formulaire de saisie permettant d’enregistrer les informations relatives à un livre.
© Éditions Eyrolles
Téléchargement