Vous êtes sur la page 1sur 24

http://emmanuel-remy.developpez.com/Java/Tutoriels/BaseDonnees/MySQL/MySQL.

htm
http://emmanuel-remy.developpez.com/Java/

Chapitres traits

Dans cette leon, nous allons mettre en oeuvre notre premire base de donnes. L'exemple propos sera
extrmement simple, le but tant de comprendre tous les mcanismes qui sont en jeu. Le logiciel de base de
donnes que j'ai choisi est MySQL, mais il est bien entendu possible d'en choisir un autre, le principe de
connexion restant identique. Avant de commencer, il est prfrable d'avoir appris au pralable toutes les
notions ncessaires dans l'tude prcdente. Pour finir, je suppose que le lecteur connait un minimum la
syntaxe de SQL. Je ne ferai aucune tude particulire sur ce langage.

Pour en savoir plus sur les principes d'une base de donnes

Rcupration du pilote de la base de donnes MySQL et configuration de JBuilder


Il va tre ncessaire de rgler JBuilder pour qu'il soit capable de se connecter la base de donnes
MySQL, ce qu'il ne sait pas faire priori. D'aprs ce que nous avons tudi au pralable, la connexion ne
s'effectue qu'au travers d'un pilote qui doit tre rcupr soit par le fournisseur de la base de donnes ou
ventuellement sur Internet. Au moment o j'cris ce cours, le pilote s'appelle
MySQL Connector/J 3.0.4 Gamma, vous avez, bien entendu, la version pour Linux (tar.gz) et la
version pour Windows (zip).
Dernire
version
stable
dun
pilote
http://www.mysql.com/downloads/api-jdbc-stable.html
N'oubliez pas qu'un pilote est
constitu d'un ensemble de classes
Java qui sont localises au sein
d'une
bibliothque
(jar).
La
premire dmarche, aprs avoir
rcupr ce fichier compress, va
tre d'extraire cette bibliothque et
de la placer un endroit
convenable.

JDBC

pour

MySQL

Le fichier que vous venez de rcuprer comporte beaucoup plus que la bibliothque, et il est relativement
consquent. Aprs avoir dcompress l'ensemble de ce fichier, introduisez-vous au sein des rpertoires
pour la localiser.

Vous pouvez, ds lors,


dplacer cette bibliothque et
la placer un endroit qui sera
plus judicieux pour JBuilder.
En toute rigueur, nous
aurions pu la laisser cet
endroit. Aprs tout, JBuilder
est capable de localiser une
bibliothque n'importe o sur
le
disque
dur.
Personnellement, je prfre la
placer avec les autres, c'est dire dans le rpertoire prvu cet effet ; savoir lib (pour library ou en
franais bibliothque). Je vous invite avoir la mme dmarche.
Il ne nous reste maintenant plus qu' configurer JBuilder pour qu'il reconnaisse cette bibliothque afin
qu'elle puisse tre intgre automatiquement dans les applications grant les bases de donnes (pour une
connexion avec MySQL, bien entendu).
En fait, c'est une technique que nous connaissons dj, aprs tout c'est une bibliothque comme une
autre.
Pour en savoir plus sur les bibliothques
Dans JBuilder, faites appel au menu Outils, et choisissez la rubrique Configurer les bibliothques....

Dans la bote de dialogue Configuration des bibliothques, cliquez sur le bouton Nouveau... pour
intgrer cette bibliothque au sein de JBuilder. Vous en profiterez pour choisir un nom votre
convenance qui soit facile retenir pour la suite. Par ailleurs, souvenez-vous qu'il est ncessaire de
spcifier l'emplacement. Pour que tout le monde puisse y avoir accs et en plus dans n'importe quel
projet, j'ai choisi l'emplacement JBuilder.

Aprs ces dsignations, cliquez sur le bouton Ajouter.... Il suffit maintenant de localiser l'archive.
Souvenez-vous que nous venons de la placer dans le rpertoire lib de JBuilder.

Il suffit maintenant de cliquer deux fois sur Ok pour valider notre slection. Du coup, cette fois-ci, le
pilote est bien intgr JBuilder.

Souvenez-vous qu'il est possible que ce pilote (cette bibliothque) soit automatiquement intgr chaque
projet en rglant Proprit du projet par dfaut..., qui se trouve dans le menu Projet. Je
n'appliquerais pas cette dmarche parce que tous les projets n'utilisent pas systmatiquement les bases
de donnes.

Utilisation des objets DataExpress pour assurer la connectivit et excuter la


premire requte
Base de donnes Entreprise
Avant de s'intresser la connexion proprement dite, vous allez mettre en oeuvre une base de donnes
trs simple que vous appellerez Entreprise et qui comportera une seule table dnomme Personnel,
dont voici les caractristiques.

Vous complterez la table par quelques valeurs de champ comme avec l'exemple propos ci dessous.

Connexion avec la base de donnes


Nous allons nous occuper d'tablir la connexion entre JBuilder et la base de donnes que nous venons
d'laborer. Pour cela, vous allez construire un nouveau projet que vous appellerez, par exemple,
Entreprise.

Attention, il faut demander intgrer la description du pilote et donc la bibliothque que nous avons mise en
oeuvre dans le chapitre prcdent. Dans l'tape 2 de l'expert projet, il est ncessaire alors de cliquer sur le
bouton Ajouter... qui se situe dans l'onglet Bibliothques ncessaires. Comme nous avons pris soin de
donner un nom vocateur, il est facile de retrouver cette bibliothque dans la zone JBuilder.

Dans ce projet vous allez demander intgrer une nouvelle application grce l'expert appropri. Vous
appelerez cette application Application et la fentre correspondante Cadre.

Nous avons maintenant notre disposition la fentre de l'application qui va servir de conteneur la
partie visuelle de la base de donnes. Placez-vous en mode conception pour placer tout ce que nous avons
besoin de faon rapide et en toute facilit. Le composant qui s'occupe de la connexion JBDC avec un

serveur distant est DataBase. Selectionnez-le dans la palette de composants DataExpress et profitez-en
pour lui donner un nom vocateur comme par exemple baseDonnes.

La proprit importante pour ce composant est connection. En effet, c'est grce elle que nous allons
prciser la base de donnes mettre en relation ainsi que le pilote slectionner pour le gestionnaire de
pilote JDBC. J'ai dj voqu que le pilote lui-mme est une classe qui porte souvent le nom quivalent
en anglais, savoir Driver. En consultant l'archive (la bibliothque) que nous avons tlcharge, vous
remarquez effectivement le nom de cette classe. Il est alors important de bien noter tout le cheminement
pour y accder com.mysql.jdbc.Driver.

Dans le paquetage que nous avons rcupr, en plus de la bibliothque, nous avons un certain nombre de
fichiers, notamment le fichier README qui vous informe justement sur les syntaxes utiliser ainsi
que le nom du pilote choisir.

Maintenant que nous connaissons les caractristiques intressantes, nous pouvons rgler la proprit
connection. Il suffit de faire apparatre la bote de dialogue correspondante en cliquant sur le bouton
.... Le systme vous propose une liste de noms de pilote par dfaut. Quelques uns sont crits en noir,
cela veut dire qu'ils sont dj installs. D'autres sont crits en rouge, dans ce cas ils ne sont pas installs,
il sera alors ncessaire de les rcuprer. Dans cette liste n'apparat pas le nom de notre pilote, ce n'est pas
grave, il suffit de l'crire tout simplement. Pour l'URL, vous avez toujours la syntaxe suivante
jdbc:mysql:// suivi du nom de l'ordinateur serveur de base de donnes, suivi du nom de la base dont
nous avons besoin. Pour le droit d'accs, il est ncessaire de spcifier votre nom suivi de votre mot de
passe. Avant de valider, il faut systmatiquement tester la connexion.

Normalement, la base de donnes ne se situe pas spcialement sur votre ordinateur. Il est possible que la
connexion n'arrive pas s'tablir correctement. Il est peut-tre ncessaire de spcifier le numro de port ( 3306
par dfaut) du serveur MySQL votre URL, ce qui donnerait : jdbc:mysql://pentium:3306/Entreprise
Par ailleurs, MySQL possde ses propres protections, notamment par rapport une connexion intervenant de
l'extrieur. Il faut que vous ayez les droits d'accs requis. Je vous rappelle que c'est la commande GRANT qui
permet d'attribuer les privilges un utilisateur.

Mise en oeuvre de la premire requte SQL


Nous sommes en contact avec la
base de donnes. Il faut maintenant
faire appel la bonne table et
intgrer les enregistrements qui
nous intressent.
Pour

cela,

il

est

ncessaire

d'excuter une requte SQL


approprie. N'oubliez pas que c'est
ce langage qui nous permet de nous
librer du type de base de donnes utilis.
L encore, il existe un composant spcifique : QueryDataSet. Placez le sur la fiche et donnez-lui comme
nom requte. La requte SQL spcifier doit tre place dans la proprit query.
Dans la bote de dialogue qui apparat, vous devez au pralable choisir la base de donnes dans la liste
droulante, c'est dire spcifier le composant qui sert d'interface et qui propose la connexion, savoir un
DataBase qui s'appelle ici baseDonnes. Vous crivez ensuite la requte dans le langage SQL dans la zone
prvue cet effet. Voil, c'est termin. Vous voyez que c'est trs rapide. N'oubliez pas, l aussi, de tester
la requte.

Dans cette requte, j'ai demand rcuprer tous les champs de


la table Personnel. En dveloppant l'objet requte, sur la partie
gauche de l'IDE, vous remarquez effectivement l'ensemble des
champs qui compose la table. Vous remarquez qu'il est mme
possible de rajouter des colonnes supplmentaires. Nous
aborderons ce sujet dans une autre tude.
Dans cette table, nous avons un champ particulier idPersonnel
qui est la cl primaire. Ce champ reprsente tout simplement
une identification unique de l'ensemble de l'enregistrement. Bien qu'il soit extrmement utile, il n'est pas
spcialement intressant pour une visualisation particulire. Je vous propose donc de le rendre non
visible. Il suffit pour cela de slectionner la colonne correspondante sur la partie gauche, et de rgler la
proprit visible FALSE.
Puisque nous avons des proprits pour chacun des champs, cela veut dire qu'il existe un objet associ
chacun de ces champs. C'est un objet de type Column. Vous remarquez que le fait d'avoir modifi une
proprit, le nom du champ est entour de crochets. Si vous consultez le code, vous remarquez galement
qu'un nouvel objet de type Column a t cr.
Libration des ressources utilises pour la base de donnes lorsque nous quittons
l'application
DBDisposeMonitor est un utilitaire permettant de s'assurer que les ressources d'un ensemble de donnes
utilises par des contrles dbSwing orients donnes sont libres quand la fentre contenant ces

contrles (gnralement un cadre) est dtruite. En particulier, quand la fentre suivie par
DBDisposeMonitor est dtruite (ou, facultativement, ferme), DBDisposeMonitor cherche tous les
composants orients donnes et donne leur proprit DataSet la valeur null.
DBDisposeMonitor se situe sur la palette dbSwing supplmentaires. Il faut rgler l'objet pour qu'il soit
actif lorsque nous quittons la fentre de l'application, c'est dire que vous slectionner this dans la
proprit dataAwareComponentContainer.

Visualisation de la table l'aide de dbSwing avec possibilit de navigation

Nous allons maintenant crer l'interface utilisateur permettant d'afficher et de parcourir les donnes
dans l'application. Nous allons placer un composant qui reprsente la table Personnel sur l'interface,
mais dans un premier temps, vous allez d'abord prendre un TableScrollPane dans le concepteur qui se
trouve sur l'onglet dbSwing et le placer au centre du panneau principal de votre fentre. Ce composant
va permettre comme son homologue JScrollPane d'avoir des ascenseurs si le contenu de la table dpasse
les capacits de visualisation de la fentre. Placez ensuite le composant JdbTable juste dessus et rgler la
proprit dataSet pour que cette table soit en relation avec la requte propose dans le chapitre
prcdent. Ds que vous effectuez ce rglage, vous obtenez automatiquement la visualisation des
enregistrements issus de la table Personnel qui est elle mme issue de la base de donnes Entreprise.

Rajoutons les outils de navigations pour se dplacer au sein de la base de donnes. Vous allez
respectivement placer un composant JdbNavToolBar sur la partie nord de la fentre, et un composant
JdbStatusLabel sur la partie sud. Comme pour le JdbTable rgler la proprit dataSet sur le
QueryDataSet requte. Vous pouvez, ds lors, lancer l'application dont voici le rsultat ci-dessous.

Quelques fonctionnalits intressantes l'aide des objets DataExpress


Pour rviser ce que nous venons d'apprendre, je vous propose d'laborer un autre projet et d'en profiter pour
rajouter quelques fonctionnalits intressantes en utilisant les comptences des objets DataExpress. Nous
allons, par exemple :

1.

Proposer l'utilisateur de saisir son mot de passe chaque visualisation de la table, sa base de
donnes tant considre comme sensible.

2.

Proposer un affichage de la table Personnel paramtr par l'utilisateur. Il sera possible par
exemple de visualiser l'ensemble des personnes comprises dans une fourchette d'ge.

3.

Proposer en plus un tri suivant le nom des personnes.

Vous allez donc fabriquer un nouveau projet que vous appellerez EntreprisePlus et ajoutez une nouvelle
application votre projet.
Attention : N'oubliez pas d'intgrer le pilote PiloteMySql.

Demande de mot de passe chaque utilisation de l'application

Comme pour le projet prcdent, intgrez un composant DataBase que vous appelerez baseDonnes.
Activez la proprit connection pour effectuer les rglages ncessaires avec notamment le choix du pilote.
Plutt que de tout rcrire, il est possible de choisir une connexion dj existante. Toutes les connexions
que vous crivez sont stockes dans un historique. Le systme mmorise le pilote, la base de donnes
utilise ainsi que le nom de l'utilisateur. La seule chose crire est le mot de passe, ce qui parait logique.
A ce sujet, puisque nous demandons l'utilisateur de saisir systmatiquement son mot de passe chaque
utilisation de l'application, vous devez cocher la rubrique Demander le mot de passe.

Attention, maintenant, chaque fois que vous utilisez cette base de donnes, on vous demandera votre
autentification, mme, ventuellement, en mode conception.

Requte paramtre

Nous allons maintenant mettre en oeuvre un filtre au niveau de la requte. Toutefois ce filtre n'est pas
dtermin ds le dpart, c'est l'utilisateur qui fixera les conditions. Pour ce projet, je dsire avoir un
affichage de la table par rapport une fourchette d'ge. Nous allons utiliser un composant
ParameterRow qui permet d'tre intgr la demande d'une requte prvu par le QueryDataSet et dont
on peut dfinir un certain nombre de nouvelles colonnes qui seront utilises pour conditionner la requte.
Placez donc, toujours issu de l'onglet DataExpress, un composant
ParameterRow dans le volet de votre fentre que vous appellerez ge.
Vous allez ensuite crer deux nouvelles colonnes, une pour l'ge
minimum, et une pour l'ge maximum. Chacune de ces colonnes
reprsentera un type entier.
Slectionnez
<nouvelle co
lonne>
et
dfinissez dans l'expecteur les proprits
suivantes pour la nouvelle colonne :
Proprit

Valeur

columnName

minimum

dataType

INT

default

25

Vous venez de mettre en oeuvre la colonne minimum. Excutez la mme procdure pour la colonne
maximum en rglant les proprits suivantes :
Proprit

Valeur

columnName

maximum

dataType

INT

default

50

Nous allons maintenant nous occuper de la requte en intgrant ces nouvelles colonnes par
l'intermdiaire de ce ParameterRow ge. Placez donc un QueryDataSet que vous appellerez requte.
Comme vous avez l'habitude maintenant, activez la proprit query. Cliquez sur l'onglet Paramtres et
choisissez, bien sr, l'objet qui sert de paramtres de filtre que nous venons de mettre en oeuvre, savoir
ge.

Revenez sur l'onglet Requte. Slectionnez la base de donnes et crivez la requte en faisant rfrence
aux colonnes minimum et maximum. Les paramtres sont prcds du symbole :. Personnellement, je
prfre crire la requte directement la main. Toutefois, il est possible de raliser une criture
automatique en sollicitant le Constructeur SQL..., mais je trouve qu'on perd beaucoup de temps pour
trs peu de rsultat.

Je vous invite systmatiquement tester la requte avant d'aller plus loin.


Tri
Si tout se passe bien, nous allons rester sur requte et demander ce que le nom des personnes soit donn
dans l'ordre alphabtique. Pour cela, vous disposez d'une proprit qui s'appelle sort. Lorsque vous
activez cette proprit, vous voyez apparatre une bote de dialogue qui vous permettra d'effectuer tous
les rglages ncessaires. Vous devez slectionner la colonne sur laquelle vous allez effectuer le tri et
cliquez sur le bouton Ajouter au tri. Il est possible d'avoir plusieurs colonnes, l'ordre de tri s'effectuant
alors suivant l'ordre des colonnes. Vous voyez que c'est trs facile et rapide raliser, il suffit maintenant
de cliquer sur OK.

Normalement, ce stade, il serait prfrable, comme nous l'avons fait sur l'application prcdente, de
cacher la colonne idPersonnel. Toutefois, pour bien montrer l'efficacit du tri, nous allons laisser cette
colonne visible.
Interface graphique - partie visuelle de la table avec les critres de choix

Nous allons placer un composant JdbTable sur la partie centrale de la fentre. N'oubliez pas de placer au
pralable un TableScrollPane. Comme auparavant, rgler la proprit dataSet avec la valeur requte.
Tous les rglages que nous avons effectus au pralable se rpercutent automatiquement. En effet,

seulement toutes les personnes dont l'ge est compris entre 25 et 50 ans (valeurs par dfaut) sont
affiches, et vous remarquez galement, qu'elles sont donnes dans l'ordre alphabtique.

Vous remarquez ds lors toute la puissance de ces composants. Le fait que chacun dispose de ses
comptences permet d'avoir une meilleure matrise. Du coup, l'laboration d'un projet s'en trouve
facilit.
Placez un JdbNavToolBar sur la partie haute de la fentre (Nord) et choisissez la requte associe. Par
contre sur la partie basse, nous allons rajouter tous les composants ncessaires pour permettre le
paramtrage de la requte l'excution. Comme il y en a plusieurs, vous allez placer un JPanel sur la
partie basse (Sud).

Placez un JLabel et rgler la proprit text en introduisant la chane de caractres L'ge est compris
entre. Vous pouvez en profiter pour rgler quelques proprits supplmentaires pour que l'affichage soit
agrable, comme le choix de la fonte ainsi que la couleur du texte. Revenez ensuite dans l'onglet dbSwing
pour placer un JdbTextField. Il faut nommer ce composant parce que nous y ferons rfrence par la
suite. Vous le nommerez minimum.
Attention, exceptionnellement, ce composant ne fait rfrence aucune requte particulire. Je n'utilise donc
pas les proprits query et columnName.

Par contre nous allons rgler quelques proprits pour que l'aspect soit agrable et surtout pour
proposer la valeur de l'ge minimum par dfaut.
Proprit

Valeur

columns

horizontalAlignment

RIGHT

text

25

Comme cela vous est montr plus haut rajouter un autre JLabel suivi d'un autre JdbTextField que vous
nommerez maximum. Rgler les proprits de maximum avec :
Proprit

Valeur

columns

horizontalAlignment

RIGHT

text

50

Enfin placer un bouton JButton que vous nommerez boutonParamtre. L'utilisateur prcisera donc les
JdbTextField les nouvelles valeurs minimale et maximale de l'ge requis et validera son choix l'aide de
ce bouton. Il faut donc grer l'vnement associ. Comme pour tous les boutons, slectionnez l'vnement
actionPerformed.

Il faut que les colonnes minimum et maximum du ParameterRow ge soient remise jour par rapport au
JbdTextField minimum et maximum. C'est se que propose les deux premires lignes du bloc try-catch.
Ensuite, il faut que la base de donnes soit effectivement interroges sur ces nouveaux critres de requte.
C'est ce que propose la mthode refresh de l'objet requte.
Le rafrachissement peut mal se passer. Dans ce cas l une exception DataSetException est dclenche.
C'est pour cette raison qu'il est ncessaire de placer un bloc try-catch. Par contre, la gestion que je
propose est trs gnrique. Si le coeur vous en dit, vous pouvez raliser une gestion beaucoup plus fine.
Excution du projet

Nous sommes prts tester notre application, il suffit de lancer l'excution. Au dpart, la bote de
dialogue relative l'identification s'affiche. Vous devez donc prciser votre nom et votre mot de passe.

A la suite de quoi, vous obtenez la fentre de votre application. Remplacez les critres de slection en
demandant, par exemple, toutes les personnes de 10 70 ans.

Conclusion
Cette tude vous a donn une approche de ce qu'il est possible de faire l'aide notamment des
composants DataExpress. Une fois que nous avons compris le concept, la mise en oeuvre est rapide et
relativement simple. Trs peu de code a t crit. Il est possible d'aller plus loin avec ces composants. Plus
tard, nous ferons une tude plus pousse sur les DataExpress et sur les dbSwing.
Pour en savoir plus sur les DataExpress et les dbSwing.

Outil Pilote de base de donnes


Consultation

Pour terminer, je vous invite prendre connaissance d'un outil particulirement intressant Pilote de
base de donnes, qui s'active par le menu Outils/Pilote de base de donnes.

Cet outil recense les connexions que vous avez dj ralises. Il est possible de visualiser le contenu
complet de toutes vos bases de donnes, notamment par exemple, les dfinitions de chacunes des colonnes
d'une table. Par contre, pour chacune des connexions, on vous demandera de vous identifier.

Mieux encore. Vous pouvez consulter le contenu de chacune des tables. Vous retrouvez finalement le
mme outil de navigation que nous avons mis en oeuvre dans notre application.
Nouveau pilote dans la liste de l'expert Connection
Ce qui va particulirement nous intresser avec cet outil, c'est que nous allons enfin pouvoir intgrer
dfinitivement notre pilote dans la liste qui est propose par l'expert Connection de JBuilder. Avant
cela, je vous invite vrifier toutes les caractristiques de ce pilote afin de permettre des rglages
appropris. Il suffit pour cela de cliquer sur la connexion dsire.

Pour spcifier un nouveau pilote dans la liste de l'expert Connection, cliquez sur la rubrique
Option... qui se trouve dans le menu Voir. La bote de dialogue Options apparat. Slectionnez l'onglet
Pilotes et cliquez sur le bouton Ajouter.... On vous demande alors de spcifier la classe qui correspond
au pilote. Ds que vous avez valid votre nom de pilote, il apparat en fin de liste.

Il devient judicieux maintenant de donner un exemple d'URL en spcifiant la syntaxe la plus prcise
possible pour viter de rcrire systmatiquement la mme chose. Le serveur de base de donnes se situe
gnralement sur le mme poste. Du coup, nous avons pratiquement toujours la mme syntaxe. Ce qui
fait la diffrence entre une application et une autre, le plus souvent, c'est tout simplement le choix de la
base de donnes. Finalement pour mon exemple, j'aurais systmatiquement la syntaxe
jdbc:mysql://pentium/.
Vrification
Cette fois-ci, si nous plaons un composant DataBase, et que nous slectionnons la proprits connection,
notre pilote apparat bien dans la liste, et en plus, son nom est de couleur noire, ce qui signifie qu'il est
parfaitement reconnu.

Ds que nous slectionnons le pilote, vous remarquez que l'URL que nous avons prcdemment choisi se
place automatiquement. Vous n'avez plus, ds lors, qu' choisir votre base de donnes et vous identifier.