Vous êtes sur la page 1sur 284

Dveloppement

dapplications
de bases de donnes
VERSI ON 9


Borland

JBuilder

Consultez le fichier deploy.html situ dans le rpertoire redist de JBuilder pour avoir la liste complte des fichiers
que vous pouvez distribuer en accord avec votre contrat de licence JBuilder.
Les applications mentionnes dans ce manuel sont brevetes par Borland Software Corporation ou en attente de
brevet. Reportez-vous au CD ou la bote de dialogue A propos. Ce document ne donne aucun droit sur ces
brevets.
COPYRIGHT 19972003 Borland Software Corporation. Tous droits rservs. Tous les produits Borland sont des
marques commerciales ou des marques dposes de Borland Software Corporation aux Etats-Unis et dans les
autres pays. Toutes les autres marques sont la proprit de leurs fabricants respectifs.
Pour connatre les conditions et limites des fournisseurs tiers, lisez les Remarques version sur votre CD JBuilder.
JBE0090WW21002database 8E11R0503
0304050607-9 8 7 6 5 4 3 2 1
PDF
i
Chapitre 1
Introduction 1-1
Rsum des chapitres . . . . . . . . . . . . . . . 1-2
Tutoriels sur les bases de donnes . . . . . . . . 1-4
Exemples de bases de donnes . . . . . . . . . . 1-5
Documentation annexe . . . . . . . . . . . . . . 1-6
Conventions de la documentation . . . . . . . . 1-8
Support et ressources destins
aux dveloppeurs . . . . . . . . . . . . . . . . 1-10
Comment contacter le support technique de
Borland . . . . . . . . . . . . . . . . . . . . 1-10
Ressources en ligne. . . . . . . . . . . . . . . 1-10
World Wide Web . . . . . . . . . . . . . . . . 1-10
Groupes de discussion Borland. . . . . . . . 1-11
Groupes de discussion Usenet . . . . . . . . 1-11
Rapports de bogues . . . . . . . . . . . . . . 1-12
Chapitre 2
Les applications
de bases de donnes JBuilder 2-1
Architecture des applications
de bases de donnes . . . . . . . . . . . . . . . 2-1
Composants DataExpress . . . . . . . . . . . . . 2-2
Principales fonctionnalits et avantages . . . 2-3
Prsentation des composants DataExpress . 2-5
Composants DataExpress pour EJB . . . . . . . 2-9
InternetBeans Express . . . . . . . . . . . . . . . 2-10
Composants de bases de donnes XML . . . . . 2-10
dbSwing. . . . . . . . . . . . . . . . . . . . . . . 2-10
Modules de donnes et modeleur de donnes . 2-12
Pilote de base de donnes. . . . . . . . . . . . . 2-12
Moniteur JDBC. . . . . . . . . . . . . . . . . . . 2-12
JDataStore et JBuilder . . . . . . . . . . . . . . . 2-13
Utilisation dun JDataStore
ou dun pilote JDBC . . . . . . . . . . . . . 2-13
Avantages supplmentaires apports
par JDataStore. . . . . . . . . . . . . . . . . 2-14
Utilisation de lexplorateur JDataStore. . . . 2-14
Oprations avec lexplorateur
JDataStore . . . . . . . . . . . . . . . . . 2-15
InterBase et JBuilder . . . . . . . . . . . . . . . . 2-16
Chapitre 3
Importation et exportation des donnes
dun fichier texte 3-1
Ajout de colonnes un TableDataSet en utilisant
lditeur . . . . . . . . . . . . . . . . . . . . . . 3-2
Importation des donnes formates dun fichier
texte. . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Rcupration de donnes dune source JDBC . . 3-3
Exportation des donnes . . . . . . . . . . . . . . 3-3
Exportation des donnes dun QueryDataSet
dans un fichier texte. . . . . . . . . . . . . . 3-4
Enregistrement des modifications dun
TableDataSet dans une table SQL . . . . . . 3-5
Enregistrement dans une source de donnes
JDBC des modifications charges depuis
un TextDataFile . . . . . . . . . . . . . . . . 3-5
Chapitre 4
Connexion une base de donnes 4-1
Connexion aux bases de donnes . . . . . . . . . 4-2
Ajout dun composant Database votre
application . . . . . . . . . . . . . . . . . . . 4-3
Dfinition des proprits de connexion
du composant Database. . . . . . . . . . . . 4-4
Configuration de JDataStore. . . . . . . . . . . . 4-7
Configuration dInterBase et InterClient . . . . . 4-7
Utilisation dInterBase et dInterClient
avec JBuilder . . . . . . . . . . . . . . . . . . 4-8
Astuces pour lutilisation des tables InterBase
exemple. . . . . . . . . . . . . . . . . . . . . 4-8
Ajout dun pilote JDBC JBuilder . . . . . . . 4-10
Cration des fichiers .library et .config . . . 4-10
Ajout du pilote JDBC aux projets . . . . . . 4-11
Connexion une base de donnes en utilisant
des pilotes JDBC InterClient . . . . . . . . . . 4-13
Utilisation du composant Database dans votre
application . . . . . . . . . . . . . . . . . . . . 4-15
Sollicitation dun nom dutilisateur et dun mot
de passe . . . . . . . . . . . . . . . . . . . . . 4-16
Mise en pool des connexions JDBC . . . . . . . 4-17
Optimisation des performances
de JConnectionPool . . . . . . . . . . . . . 4-19
Sorties historiques. . . . . . . . . . . . . . . 4-19
Exemple de mise en pool . . . . . . . . . . . 4-20
En cas de problme lors des connexions
de JDataStore et dInterBase . . . . . . . . . . 4-22
Messages derreur de connexion courants . 4-22
Table des matires
ii
Chapitre 5
Extraction des donnes
dune source de donnes 5-1
Interrogation dune base de donnes . . . . . . 5-2
Dfinition des proprits dans la bote
de dialogue query . . . . . . . . . . . . . . 5-4
La page Requte . . . . . . . . . . . . . . 5-4
La page Paramtres. . . . . . . . . . . . . 5-6
Placer le texte SQL dans lensemble
de ressources . . . . . . . . . . . . . . . 5-7
Interrogation dune base de donnes :
Trucs & astuces . . . . . . . . . . . . . . . . 5-9
Amlioration des performances
des ensembles de donnes . . . . . . . . 5-10
Persistance des mtadonnes
dune requte . . . . . . . . . . . . . . . 5-11
Ouverture et fermeture des ensembles
de donnes. . . . . . . . . . . . . . . . . 5-12
Comment sassurer quune requte
est modifiable . . . . . . . . . . . . . . . 5-12
Utilisation de requtes paramtres pour obtenir
des donnes dune base de donnes . . . . . . 5-12
Paramtrage dune requte . . . . . . . . . . 5-13
Cration de lapplication. . . . . . . . . . 5-13
Ajout dun composant ParameterRow . . 5-14
Ajout dun QueryDataSet . . . . . . . . . 5-15
Ajout des composants
dinterface utilisateur . . . . . . . . . . . 5-16
Les requtes paramtres : Trucs & astuces . 5-19
Utilisation de paramtres . . . . . . . . . 5-19
R-excution dune requte
avec des paramtres modifis . . . . . . 5-21
Requtes paramtres dans les relations
matre-dtail . . . . . . . . . . . . . . . . 5-22
Chapitre 6
Utilisation
des procdures stockes 6-1
Procdures stockes : trucs & astuces . . . . . . 6-3
Squences dchappement, instructions SQL
et appels de procdure spcifiques
au serveur . . . . . . . . . . . . . . . . . . . 6-3
Utilisation des procdures stockes spcifiques
un fournisseur . . . . . . . . . . . . . . . . . 6-4
Utilisation avec JDataStore de procdures
stockes et de fonctions dfinies
par lutilisateur . . . . . . . . . . . . . . . . 6-4
Utilisation de procdures stockes InterBase 6-5
Utilisation de paramtres avec des procdures
stockes Oracle PL/SQL . . . . . . . . . . . 6-5
Utilisation des procdures stockes Sybase . 6-6
Exemple dapplication avec des procdures
stockes spcifiques au serveur de la base
de donnes . . . . . . . . . . . . . . . . . . . 6-6
Ecriture dun fournisseur de donnes
personnalis . . . . . . . . . . . . . . . . . . . . 6-7
Obtention des mtadonnes . . . . . . . . . . 6-8
Appel de initData . . . . . . . . . . . . . . 6-9
Obtention des donnes relles . . . . . . . . . 6-9
Conseils pour la conception dun fournisseur
de donnes personnalis . . . . . . . . 6-10
Explication de la mthode provideData()
dans des ensembles de donnes
matre-dtail . . . . . . . . . . . . . . . 6-10
Chapitre 7
Manipulation des colonnes 7-1
Prsentation des proprits et mtadonnes
de colonne . . . . . . . . . . . . . . . . . . . . . 7-1
Proprits dune colonne qui ne sont pas
des mtadonnes . . . . . . . . . . . . . . . 7-2
Visualisation des informations de colonnes
dans le concepteur de colonne . . . . . . . . 7-2
Bouton Crer une classe RowIterator . . . . . 7-3
Utilisation du concepteur de colonne
pour rendre persistantes des mtadonnes . 7-4
Utilisation du concepteur de colonne
pour rendre dynamiques des mtadonnes 7-5
Visualisation des informations des colonnes
dans le pilote de base de donnes . . . . . . 7-5
Optimisation dune requte . . . . . . . . . . . . 7-6
Dfinition des proprits dune colonne . . . 7-7
Dfinition des proprits des colonnes
en utilisant les outils de conception visuelle
de JBuilder . . . . . . . . . . . . . . . . . 7-7
Dfinition des proprits dans le code . . 7-7
Colonnes persistantes. . . . . . . . . . . . . . 7-8
Combinaison de mtadonnes dynamiques
et de colonnes persistantes . . . . . . . . . . 7-9
Suppression des colonnes persistantes . . . . 7-9
Utilisation de colonnes persistantes pour
ajouter des colonnes vides un ensemble
de donnes . . . . . . . . . . . . . . . . 7-10
Contrle de lordre des colonnes dans
un ensemble de donnes . . . . . . . . . . 7-11
iii
Chapitre 8
Enregistrement des modifications
dans la source de donnes 8-1
Enregistrement des modifications
dun QueryDataSet. . . . . . . . . . . . . . . . 8-3
Ajout dun bouton pour enregistrer
des modifications depuis un QueryDataSet 8-4
Enregistrement des modifications dans la source
de donnes par une procdure stocke . . . . 8-6
Enregistrement des modifications avec
un QueryResolver . . . . . . . . . . . . . . 8-6
Codage de procdures stockes pour grer
la rsolution de donnes. . . . . . . . . . . . . 8-6
Enregistrement des modifications avec
un ProcedureResolver . . . . . . . . . . . . 8-8
Exemple : Utilisation de procdures stockes
InterBase avec paramtres de retour . . . . 8-10
Rsolution des donnes de plusieurs tables . . 8-10
Remarques sur les types de liaisons entre
les tables dune requte . . . . . . . . . . . 8-11
Rfrences (alias) de tables et de colonnes
dans une chane de requte . . . . . . . . . 8-12
Contrle du paramtrage des proprits
de colonne . . . . . . . . . . . . . . . . . . . 8-13
Que faire si une table nest pas modifiable ? 8-13
Comment spcifier quune table ne doit pas
tre actualise ? . . . . . . . . . . . . . . . . 8-13
Utilisation des ensembles de donnes avec RMI
(mise en flux) . . . . . . . . . . . . . . . . . . . 8-13
Exemple : Utilisation de flux densembles
de donnes . . . . . . . . . . . . . . . . . . 8-14
Utilisation des mthodes de flux densemble
de donnes . . . . . . . . . . . . . . . . . . 8-15
Personnalisation de la logique de rsolution
par dfaut . . . . . . . . . . . . . . . . . . . . . 8-16
Explication de la rsolution par dfaut . . . 8-17
Ajout dun composant QueryResolver . . 8-17
Interception des vnements
de rsolution. . . . . . . . . . . . . . . . 8-18
Utilisation des vnements
de rsolution. . . . . . . . . . . . . . . . 8-19
Ecriture dun rsolveur de donnes
personnalis . . . . . . . . . . . . . . . . . . 8-20
Gestion des erreurs de rsolution . . . . . 8-21
Rsolution des relations matre-dtail . . 8-22
Chapitre 9
Etablissement dune relation
matre-dtail 9-1
Dfinition dune relation matre-dtail . . . . . . 9-2
Cration dune application avec une relation
matre-dtail . . . . . . . . . . . . . . . . . . 9-3
Lecture des dtails . . . . . . . . . . . . . . . . . 9-7
Lecture de tous les dtails en une seule fois . 9-8
Lecture des enregistrements dtail slectionns
la demande . . . . . . . . . . . . . . . . . . 9-8
Modification des donnes dans les ensembles
de donnes matre-dtail . . . . . . . . . . . . . 9-9
Etapes de la cration dune relation
matre-dtail . . . . . . . . . . . . . . . . . . . 9-10
Enregistrement des modifications dans une relation
matre-dtail . . . . . . . . . . . . . . . . . . . 9-12
Rsolution des ensembles de donnes
matre-dtail avec une source JDBC . . . . 9-13
Chapitre 10
Utilisation des modules de donnes pour
simplifier laccs aux donnes 10-1
Cration dun module de donnes en utilisant
les outils de conception. . . . . . . . . . . . . 10-2
Cration du module de donnes
avec lexpert . . . . . . . . . . . . . . . . . 10-2
Ajout de composants donnes un module
de donnes . . . . . . . . . . . . . . . . . . 10-3
Ajout de la logique mtier au module
de donnes . . . . . . . . . . . . . . . . . . 10-5
Utilisation dun module de donnes . . . . 10-5
Ajout dune bibliothque ncessaire
un projet. . . . . . . . . . . . . . . . . 10-6
Rfrencement dun module de donnes
dans votre application. . . . . . . . . . 10-7
Comprhension de lexpert Utilisation
dun module de donnes . . . . . . . . 10-8
Cration de modules de donnes en utilisant
le modeleur de donnes . . . . . . . . . . . 10-10
Cration des requtes avec le modeleur
de donnes . . . . . . . . . . . . . . . . . 10-10
Ouverture dune URL . . . . . . . . . . .10-11
Dbut dune requte. . . . . . . . . . . 10-12
Ajout dune clause Group By. . . . . . 10-14
Slection des lignes ayant des valeurs
de colonnes uniques . . . . . . . . . . 10-15
Ajout dune clause Where. . . . . . . . 10-15
Ajout dune clause Order By . . . . . . 10-16
Modification directe de la requte . . . 10-17
iv
Test de votre requte . . . . . . . . . . . 10-17
Construction de requtes multiples. . . 10-17
Spcification dune relation
matre-dtail . . . . . . . . . . . . . . . 10-18
Enregistrement de vos requtes . . . . . 10-19
Gnration dapplications
de bases de donnes . . . . . . . . . . . . 10-20
Utilisation dans votre code dun module
de donnes gnr . . . . . . . . . . . 10-22
Chapitre 11
Filtrage, tri et recherche
de donnes 11-1
Accs aux donnes des exemples . . . . . . . . 11-2
Filtrage des donnes . . . . . . . . . . . . . . . . 11-5
Ajout et suppression de filtres . . . . . . . . 11-6
Tri des donnes. . . . . . . . . . . . . . . . . . . 11-9
Tri des donnes dans un composant
JdbTable . . . . . . . . . . . . . . . . . . . 11-10
Tri des donnes en utilisant les outils
de conception visuelle de JBuilder . . . . 11-11
Tri et indexation. . . . . . . . . . . . . . 11-12
Codage du tri . . . . . . . . . . . . . . . . . 11-14
Recherche de donnes . . . . . . . . . . . . . . 11-14
Recherche de donnes avec le composant
JdbNavField. . . . . . . . . . . . . . . . . 11-15
Recherche de donnes par programme . . 11-17
Recherche de donnes au moyen
dun DataRow. . . . . . . . . . . . . . . . 11-18
Utilisation des options de recherche . . . . 11-18
Recherches grant tous les types
de donnes . . . . . . . . . . . . . . . . . 11-20
Lordre des colonnes dans le DataRow
et le DataSet . . . . . . . . . . . . . . . . . 11-20
Chapitre 12
Ajout de fonctionnalits aux applications
de bases de donnes 12-1
Cration de rfrences. . . . . . . . . . . . . . . 12-2
Saisie de donnes avec une liste
de slection . . . . . . . . . . . . . . . . . . 12-2
Ajout dun champ liste de slection . . . . 12-3
Suppression dun champ liste de slection 12-4
Cration dune rfrence en utilisant
une colonne calcule . . . . . . . . . . . . . 12-5
Utilisation de colonnes calcules . . . . . . . . . 12-8
Cration dune colonne calcule
dans le concepteur . . . . . . . . . . . . . . 12-9
Agrgation de donnes avec des champs
calculs. . . . . . . . . . . . . . . . . . . . 12-11
Exemple : Agrgation de donnes
avec des champs calculs . . . . . . . 12-12
Dfinition des proprits
de AggDescriptor . . . . . . . . . . . . . 12-15
Cration dun gestionnaire dvnement
dagrgation personnalis . . . . . . . . 12-16
Ajout de modles daffichage ou de modification
pour formater les donnes . . . . . . . . . . 12-16
Masques daffichage . . . . . . . . . . . . 12-18
Masques de saisie . . . . . . . . . . . . . . 12-18
Utilisation de masques pour limportation
et lexportation de donnes. . . . . . . . 12-19
Modles dpendant du type de donnes . 12-19
Modles pour les donnes numriques 12-19
Modles des donnes date et heure . . 12-21
Modles de donnes chane. . . . . . . 12-21
Modles des donnes boolennes . . . 12-22
Prsentation de plusieurs vues des donnes. 12-23
Garantie de la persistance des donnes . . . 12-25
Rendre des colonnes persistantes . . . . . 12-25
Utilisation de types de donnes variant . . . 12-27
Stockage dobjets Java. . . . . . . . . . . . 12-27
Chapitre 13
Utilisation dautres contrles
et vnements 13-1
Synchronisation des composants visuels. . . . 13-1
Accs aux donnes et aux informations de modle
depuis un composant dinterface utilisateur . 13-2
Affichage dinformations dtat . . . . . . . . . 13-3
Ajout dun composant JdbStatusLabel
une application . . . . . . . . . . . . . . 13-3
Excution de lapplication JdbStatusLabel . 13-4
Gestion des erreurs et des exceptions. . . . . . 13-5
Remplacement de la gestion par dfaut
des exceptions DataSetException
dans les contrles . . . . . . . . . . . . . . 13-6
Chapitre 14
Cration dune application de base
de donnes distribue laide
de DataSetData 14-1
Explication de lexemple dapplication de base
de donnes distribue (utilisant Java RMI
et DataSetData) . . . . . . . . . . . . . . . . . 14-2
Installation de lapplication exemple . . . . 14-3
Que se passe-t-il ? . . . . . . . . . . . . . 14-4
Transmission des mtadonnes
par DataSetData . . . . . . . . . . . . . 14-5
Dploiement de lapplication sur plusieurs
niveaux . . . . . . . . . . . . . . . . . . 14-5
v
Chapitre 15
Administration
dune base de donnes 15-1
Exploration des tables et mtadonnes
des bases de donnes en utilisant
le pilote de base de donnes . . . . . . . . . . 15-1
Parcourir les objets de schma dune base
de donnes . . . . . . . . . . . . . . . . . . 15-2
Configuration des pilotes pour accder des
bases de donnes distantes ou locales . . . 15-3
Excution dinstructions SQL . . . . . . . . . 15-4
Utilisation de lexplorateur pour visualiser
ou modifier les donnes des tables . . . . . 15-6
Utilisation du pilote de base de donnes
pour ladministration de bases de donnes . . 15-8
Cration de la source de donnes SQL. . . . 15-8
Remplissage dune table SQL en utilisant
JBuilder . . . . . . . . . . . . . . . . . . . 15-10
Suppression de tables dans JBuilder . . . . 15-11
Surveillance des connexions aux bases
de donnes . . . . . . . . . . . . . . . . . . . 15-11
A propos du Moniteur JDBC . . . . . . . . 15-11
Utilisation du Moniteur JDBC
dans une application en excution . . . . 15-13
Ajout du MonitorButton la palette . . 15-13
Utilisation de la classe MonitorButton
dans le code . . . . . . . . . . . . . . . 15-14
Proprits de MonitorButton . . . . . . 15-14
Chapitre 16
Tutoriel : Importation et exportation
des donnes dun fichier texte 16-1
Etape 1 : Cration du projet . . . . . . . . . . . 16-2
Etape 2 : Cration du fichier texte. . . . . . . . 16-3
Etape 3 : Gnration dune application. . . . . 16-3
Etape 4 : Ajout de composants DataExpress
votre application . . . . . . . . . . . . . . . 16-4
Etape 5 : Ajout de composants dbSwing
pour crer linterface utilisateur . . . . . . . . 16-6
Etape 6 : Ajout dun composant Swing JButton 16-8
Etape 7 : Compilation et excution de votre
application . . . . . . . . . . . . . . . . . . . 16-10
Etape 8 : Utilisation de modle
pour lexportation de champs numriques,
date/heure et texte . . . . . . . . . . . . . . 16-12
Chapitre 17
Tutoriel : Cration dune application
de base de donnes lmentaire 17-1
Etape 1 : Cration du projet . . . . . . . . . . . 17-3
Etape 2 : Gnration dune application. . . . . 17-4
Etape 3 : Ajout de composants DataExpress
votre application . . . . . . . . . . . . . . . 17-4
Etape 4 : Conception des colonnes
de lapplication . . . . . . . . . . . . . . . . . 17-7
Ajout de colonnes et modification des proprits
des colonnes . . . . . . . . . . . . . . . . . 17-7
Spcification des calculs des colonnes
calcules . . . . . . . . . . . . . . . . . . . 17-9
Etape 5 : Ajout de composants dbSwing
pour crer linterface utilisateur . . . . . . . 17-10
Etape 6 : Agrgation de donnes
avec des champs calculs. . . . . . . . . . . 17-14
Index I-1
vi
I n t r o d u c t i o n 1-1
C h a p i t r e
1
Chapitre1Introduction
Dveloppement dapplications de bases de donnes traite de lutilisation des
fonctionnalits de base de donnes de DataExpress (JBuilder) pour
dvelopper des applications de bases de donnes. Vous y trouverez
galement comment utiliser des composants dbSwing pour crer
linterface utilisateur de votre application. Les fonctionnalits standard
dune application de base de donnes sont prsentes au travers
dexemples afin que vous puissiez apprendre en les ralisant.
Des informations conceptuelles sont fournies et suivies, ds que possible,
par des exemples, avec des renvois sur des informations plus dtailles
quand cela est ncessaire.
Veuillez vrifier que vous tes bien en possession des additifs la
documentation et de ses mises jour, ladresse http://www.borland.com/
techpubs/jbuilder. Vous pouvez aussi consulter laide en ligne de JBuilder.
Les informations de laide en ligne sont plus rcentes que celles de la
documentation imprime.
Si vous avez des questions en matire de cration des applications de
bases de donnes en utilisant JBuilder, visitez le groupe de discussion
consacr aux bases de donnes, ladresse news://newsgroups.borland.com/
borland.public.jbuilder.database. Ce groupe de discussion, ddi aux
problmes dcriture des applications de bases de donnes avec JBuilder,
est anim par nos ingnieurs support ainsi que par lquipe de
dveloppement de JBuilder. Pour des discussions sur les composants
dbSwing, le groupe de discussion news://newsgroups.borland.com/
borland.public.jbuilder.dbswing peut vous fournir de laide lors de la
cration dinterfaces utilisateur dapplications de bases de donnes. Le site
Web de la communaut Borland hberge les rponses aux questions
frquemment poses (FAQ) sur DataExpress ladresse
http://community.borland.com/.
1-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R s u m d e s c h a p i t r e s
Remarque Toutes les versions de JBuilder fournissent un accs direct aux donnes
SQL via lAPI JDBC de Sun. JBuilder Entreprise propose des composants
DataExpress supplmentaires simplifiant grandement le dveloppement
des applications de bases de donnes, comme le montre ce manuel.
Nombre de ces composants sont facilement accessibles via longlet
DataExpress de la palette de composants.
DataExpress stocke les donnes en mmoire. La plupart des tutoriels et
applications exemple dcrits dans ce manuel utilisent des donnes
exemple stockes dans un JDataStore et accessibles via un pilote JDBC.
Le remplacement du module de stockage en mmoire de JDataStore
fournit un stockage permanent des donnes. JDataStore peut tre trait
comme toute base de donnes SQL - vous pouvez vous y connecter
comme tout serveur, y excuter des requtes SQL, etc. Pour davantage
dinformations sur JDataStore, voir le Guide du dveloppeur JDataStore.
Pour des explications sur les conventions de la documentation, voir
Conventions de la documentation, page 1-8.
Si JBuilder ne vous est pas familier, nous vous conseillons de commencer
par Introduction JBuilder. Si Java ne vous est pas familier, nous vous
conseillons de commencer par Introduction Java.
Rsum des chapitres
Ce manuel dcrit en dtail comment les technologies et les outils sur les
bases de donnes apparaissent dans JBuilder et comment vous travaillerez
avec eux dans lEDI et lditeur. Il explique galement comment ces
technologies sajustent dans une application de base de donnes. Pour
avoir plus dinformations, choisissez lune des rubriques suivantes :
Chapitre 2, Les applications de bases de donnes JBuilder
Introduit les technologies, les composants et les outils utiliss pour
crer des applications de bases de donnes dans JBuilder, notamment la
bibliothque de composants DataExpress, le pilote de base de donnes,
le moniteur JDBC, les sources de donnes, JDataStore et InterBase.
Chapitre 3, Importation et exportation des donnes dun fichier texte
Explique comment alimenter en donnes une application depuis un
fichier texte et comment enregistrer les donnes vers un fichier texte ou
une source de donnes SQL.
Chapitre 4, Connexion une base de donnes
Dcrit comment connecter vos composants de base de donnes un
serveur. Inclut des informations sur lutilisation des pilotes de bases de
donnes JDBC et ODBC, ainsi que des informations spcifiques la
connexion aux bases de donnes JDataStore et InterBase.
I n t r o d u c t i o n 1-3
R s u m d e s c h a p i t r e s
Chapitre 5, Extraction des donnes dune source de donnes
Dcrit comment crer une copie locale des donnes de votre source de
donnes et quels composants du paquet DataExpress utiliser. Cette
phase (appele acquisition ou fourniture des donnes) rend les donnes
accessibles lapplication.
Chapitre 6, Utilisation des procdures stockes
Dcrit comment crer et utiliser des procdures stockes pour excuter
des instructions SQL effectuant lacquisition ou la rsolution des
donnes.
Chapitre 7, Manipulation des colonnes
Dcrit la manire de rendre des colonnes persistantes, de contrler
laspect ou la saisie des donnes dune colonne, dobtenir les
informations des mtadonnes, dajouter une colonne un ensemble de
donnes et de dfinir lordre daffichage des colonnes.
Chapitre 8, Enregistrement des modifications dans la source
de donnes
Dcrit la manire denregistrer dans la source de donnes les
modifications de donnes faites dans lapplication JBuilder (ce
processus est appel rsolution). Dtaille plusieurs mthodes de
rsolution, notamment le mcanisme de rsolution standard propos
par les composants DataExpress, lenregistrement des modifications
avec les procdures stockes, la rsolution des donnes provenant de
plusieurs tables, lutilisation des objets DataSet avec RMI, la
personnalisation de la logique de rsolution par dfaut.
Chapitre 9, Etablissement dune relation matre-dtail
Dcrit comment lier plusieurs ensembles de donnes pour crer une
relation parent/enfant (ou matre-dtail).
Chapitre 10, Utilisation des modules de donnes pour simplifier
laccs aux donnes
Dcrit comment utiliser des modules de donnes pour simplifier laccs
aux donnes de vos applications et, simultanment, standardiser la
logique et les rgles de fonctionnement de la base de donnes pour tous
les dveloppeurs accdant aux donnes. Fournit galement des
informations sur lutilisation de lexpert Modeleur de donnes pour
crer des modules de donnes.
Chapitre 11, Filtrage, tri et recherche de donnes
Dcrit comment implmenter le tri, le filtrage et la recherche de
donnes dans les applications de bases de donnes, laide des
composants DataExpress standard et les outils de conception de
JBuilder. Explique les diffrences entre ces fonctionnalits, et offre un
tutoriel pour chacune delles.
1-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
T u t o r i e l s s u r l e s b a s e s d e d o n n e s
Chapitre 12, Ajout de fonctionnalits aux applications de bases
de donnes
Inclut des informations sur les tches suivantes :
Formatage et analyse de donnes avec des masques de saisie ou
daffichage
Cration de colonnes calcules
Agrgation de donnes (minimum, maximum, somme, dcompte)
Cration dun champ de recherche
Prsentation de plusieurs vues des donnes
Cration de champs persistants ou prdfinis
Chapitre 13, Utilisation dautres contrles et vnements
Expose les mthodes complmentaires facilitant le dveloppement de
la partie interface utilisateur de votre application. Discute de laffichage
des informations dtat dans votre application et du traitement des
erreurs de lapplication.
Chapitre 14, Cration dune application de base de donnes distribue
laide de DataSetData
Dcrit lutilisation des composants DataExpress dans un
environnement informatique objets distribus (via Java RMI).
Chapitre 15, Administration dune base de donnes
Inclut des informations sur les tches suivantes :
Parcours et modification des donnes, des tables et des schmas de
base de donnes en utilisant le pilote de base de donnes
Cration et suppression de tables
Remplissage de tables par des donnes
Surveillance du trafic JDBC avec le moniteur JDBC
Tutoriels sur les bases de donnes
Les tutoriels suivants illustrent les techniques de dveloppement
dapplications de bases de donnes les plus utiles.
Chapitre 16, Tutoriel : Importation et exportation des donnes
dun fichier texte
Montre comment utiliser le composant TableDataSet pour importer/
exporter les donnes dun fichier texte. Ce tutoriel montre dautre part
comment se servir des composants dbSwing et des outils de conception
de JBuilder pour construire linterface utilisateur de vos applications de
bases de donnes.
I n t r o d u c t i o n 1-5
E x e m p l e s d e b a s e s d e d o n n e s
Chapitre 17, Tutoriel : Cration dune application de base de donnes
lmentaire
Montre comment construire une application de base de donnes simple
se connectant une base SQL. Vous verrez comment dfinir les
proprits de connexion la base de donnes, ajouter un champ de
recherche pour localiser des donnes et ajouter des champs calculs
pour gnrer des totaux dans une colonne.
Exemples de bases de donnes
Il existe de nombreux exemples dmontrant les technologies et techniques
spcifiques aux applications de bases de donnes. La majorit des
exemples spcifiques aux bases de donnes se trouvent dans les
rpertoires suivants :
<jbuilder>/samples/DataExpress : contient une grande varit de projets
dmontrant les techniques dutilisation des composants DataExpress
pour le dveloppement des applications de bases de donnes.
<jbuilder>/samples/dbSwing : contient des projets illustrant lutilisation
des composants dbSwing pour la cration des interfaces utilisateur des
applications de bases de donnes.
<jbuilder>/samples/JDataStore : contient le code exemple, les fichiers des
bases et les projets JBuilder dmontrant lutilisation des bases de
donnes JDataStore et des pilotes de bases de donnes JDataStore avec
JBuilder. Ces fichiers exemple compltent les tutoriels et les exemples
traits dans le Guide du dveloppeur JDataStore.
Beaucoup dapplications accdent aux donnes de la base JDataStore
exemple, employee.jds ou de la base exemple InterBase, employee.gdb. Pour
plus dinformations sur JDataStore, voir le Guide du dveloppeur JDataStore.
Pour davantage dinformations sur le serveur InterBase, consultez sa
documentation en ligne.
Dans ce guide, les exemples sont mentionns lorsquils dmontrent le
concept spcifique prsent par le texte.
Remarque Si vous souhaitez examiner les applications exemple dans le concepteur
de JBuilder, il vous faudra construire le projet correspondant chaque
exemple avant de lamener dans le concepteur. Pour construire un projet,
choisissez Projet|Reconstruire le projet.
1-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
D o c u m e n t a t i o n a n n e x e
Documentation annexe
La documentation Borland contient des informations utiles au
dveloppement des applications de bases de donnes :
Rfrence de la bibliothque de composants DataExpress est la
documentation en ligne sur lAPI des paquets DataExpress utiliss
pour laccs aux donnes. Elle inclut les rfrences des paquets de
composants suivants :
Rfrence DataExpress :
Contient la documentation API pour les paquets assurant laccs
basique aux donnes. Le paquet com.borland.dx.dataset fournit les
routines gnrales de connectivit, gestion et manipulation des
donnes. Le paquet com.borland.dx.sql.dataset procure les fonctions
de connectivit aux donnes spcifiques JDBC. Le paquet
com.borland.dx.text contient des classes et des interfaces qui
contrlent lalignement et le formatage des objets, ainsi que le
formatage des donnes et des valeurs. Ce paquet gre en outre le
formatage et lanalyse des exceptions comme la validation de la
saisie.
Rfrence dbSwing :
Contient la documentation API pour le paquet com.borland.dbswing ;
les composants contenus dans ce paquet permettent des
composants Swing daccder des bases de donnes au travers des
ensembles de donnes DataExpress (DataSet).
Rfrence JDataStore :
Contient la documentation API pour les paquets servant la
connexion aux bases de donnes JDataStore ainsi qu la excution
des transactions sur ces bases. Le paquet com.borland.datastore
fournit les fonctions basiques de connectivit et du support des
transactions pour les bases de donnes JDataStore locales. Le paquet
com.borland.datastore.jdbc contient linterface JDBC avec le
DataStore, y compris le pilote JDBC lui-mme, en mme temps que
les classes permettant dimplmenter votre propre serveur DataStore
pour les connexions multi-utilisateurs au mme DataStore. Le
paquet com.borland.datastore.javax.sql apporte le support des
transaction distribues (XA). Les classes de ce paquet sont utilises
en interne par dautres classes Borland. Vous ne devez jamais utiliser
directement les classes de ce paquet.
Rfrence des classes Javax :
Contient la documentation API pour le paquet com.borland.javax.sql
qui fournit les implmentations des sources de donnes JDBC 2.0 et
les composants pour la mise en pool des connexions. Ces classes
peuvent servir avec nimporte quel pilote JDBC mais possdent des
fonctionnalits supplmentaires spcifiques au pilote JDBC
JDataStore.
I n t r o d u c t i o n 1-7
D o c u m e n t a t i o n a n n e x e
Rfrence InternetBeans Express :
Contient la documentation API pour les paquets
com.borland.internetbeans et com.borland.internetbeans.taglib qui
fournissent des composants et une bibliothque de balises JSP
permettant de gnrer la couche prsentation dune application web,
et dy rpondre.
Rfrence des classes adaptateur pour SQL :
Contient la documentation API pour le paquet com.borland.sql. Ce
paquet contient linterface SQLAdapter pouvant tre implmente par
nimporte quelle classe JDBC adaptable en vue de lamlioration
des performances.
Rfrence des classes des outils SQL :
Contient la documentation API pour le paquet com.borland.sqltools
contenant les classes pour rcuprer la sortie dun rapport en
utilisant les requtes SQL spcifies dans le format XML.
Rfrence CORBA Express :
Contient la documentation API pour le paquet com.borland.cx
contenant les classes de connexion CORBA pour les applications
distribues bases sur CORBA.
Rfrence DataExpress EJB :
Contient la documentation API pour le paquet com.borland.dx.ejb. Ce
paquet contient les composants DataExpress pour EJB qui
permettent dutiliser des beans entit avec les DataSet DataExpress
pour la rsolution et lacquisition des donnes. Certains de ces
composants peuvent tre ajouts depuis la page EJB de la palette de
composants dans le concepteur dinterface utilisateur.
Rfrence des composants de bases de donnes XML :
Contient la documentation API pour les composants de bases de
donnes XML dans les paquets
com.borland.jbuilder.xml.database.xmldbms,
com.borland.jbuilder.xml.database.template et
com.borland.jbuilder.xml.database.common. Beaucoup des composants
de ces paquets peuvent tre ajouts depuis la page XML de la palette
de composants dans le concepteur dinterface utilisateur.
Guide du dveloppeur dapplications web contient des informations sur
lutilisation des composants InternetBeans Express pour crer des
applications web accdant aux donnes. Le Guide du dveloppeur
dapplications web comprend des tutoriels qui montrent comment
utiliser les composants InternetBeans Express avec des JSP et des
servlets.
Guide du dveloppeur XML explique comment utiliser les composants
bean modle et template de XML pour crer des requtes sur une base
de donnes et comment transfrer des donnes entre des documents
XML et des bases de donnes. Le Guide du dveloppeur XML comprend
1-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n v e n t i o n s d e l a d o c u m e n t a t i o n
galement des tutoriels qui illustrent lutilisation des composants de
bases de donnes XML.
Dveloppement des Enterprise JavaBeans explique comment utiliser les
composants DataExpress pour EJB afin de transfrer des donnes
depuis les beans entit dploys sur un serveur vers une application
client et vice-versa.
Guide du dveloppeur JDataStore contient une rfrence complte qui
vous aidera utiliser JDataStore avec les applications de base de
donnes que vous dveloppez.
Conventions de la documentation
La documentation Borland sur JBuilder utilise les polices et les symboles
dcrits dans le tableau suivant pour signaler du texte particulier.
Tableau 1.1 Polices et symboles
Police Signification
Police
espacement fixe
La police espacement fixe reprsente :
du texte tel quil apparat lcran
du texte que vous devez taper, comme dans Tapez Hello
World dans le champ Titre de lexpert Application.
des noms de fichiers
des noms de chemins
des noms de rpertoires ou de dossiers
des commandes, comme SET PATH
du code Java
des types de donnes Java, comme boolean, int et long.
des identificateurs Java, comme des noms de variables,
classes, noms de paquets, interfaces, composants, proprits,
mthodes et vnements
des noms dargument
des noms de champs
des mots cls Java, comme void et static
Gras Le gras est utilis pour dsigner les outils java, bmj (Borland
Make for Java), bcj (Borland Compiler for Java) et les options du
compilateur. Par exemple : javac, bmj, -classpath.
Italiques Litalique est utilis pour les termes nouveaux, les titres des
manuels et, parfois, pour la mise en valeur.
Touches Cette police indique les touches du clavier, comme dans
Appuyez sur Echap pour quitter le menu.
[ ] Les crochets droits dans le texte ou dans la syntaxe entourent les
lments facultatifs. Ne tapez pas ces crochets.
I n t r o d u c t i o n 1-9
C o n v e n t i o n s d e l a d o c u m e n t a t i o n
JBuilder est disponible sur plusieurs plates-formes. Reportez-vous au
tableau suivant pour une description des conventions associes aux
diverses plates-formes.
< > Les crochets angulaires indiquent des variables dans les chemins
de rpertoire, les options de commande et les exemples de code.
Par exemple, <filename> peut tre utilis pour indiquer
lemplacement o vous devez fournir un nom de fichier
(y compris lextension du fichier) et <username> indique
gnralement que vous devez fournir votre nom dutilisateur.
Lorsque vous remplacez des variables dans les chemins de
rpertoire, les options de commande et les exemples de code,
remplacez toute la variable, y compris les crochets angulaires
(< >). Par exemple, vous pouvez remplacer <filename> par le nom
dun fichier, comme employee.jds, et omettre les crochets.
Remarque : Les crochets angulaires sont utiliss dans les fichiers
HTML, XML, JSP et dautres fichiers bass sur des balises pour
dmarquer les lments des documents, comme <font
color=red> et <ejb-jar>. La convention suivante dcrit comment
les chanes variables sont spcifies dans les exemples de code
qui utilisent dj des crochets angulaires comme dlimiteurs.
Italiques, serif Ce formatage permet dindiquer les chanes variables des
exemples de code qui utilisent dj des crochets angulaires
comme dlimiteurs. Par exemple, <url="jdbc:borland:jbuilder\\
samples\\guestbook.jds">
... Dans les exemples de code, les points de suspension (...)
indiquent le code qui a t omis dans lexemple pour gagner de
la place et amliorer la comprhension. Sur un bouton, les points
de suspension indiquent que ce bouton ouvre une bote de
dialogue de slection.
Tableau 1.2 Conventions des plates-formes
Elment Signification
Chemins Les chemins daccs mentionns dans la documentation sont
indiqus par une barre oblique (/).
Pour Windows, utilisez une barre oblique inverse (\).
Rpertoire de base Lemplacement du rpertoire de base standard dpend de la
plate-forme et sera indiqu par la variable <home>.
Pour UNIX et Linux, le rpertoire de base peut varier. Par
exemple, ce peut tre /user/<nomutilisateur> ou /home/
<username>
Pour Windows NT, le rpertoire de base est C:\Winnt\
Profiles\<nomutilisateur>
Pour Windows 2000 et XP, le rpertoire de base est C:\
Document and Settings\<nomutilisateur>
Captures dcran Les captures dcran refltent lapparence Metal sur diverses
plates-formes.
Tableau 1.1 Polices et symboles (suite)
Police Signification
1-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
S u p p o r t e t r e s s o u r c e s d e s t i n s a u x d v e l o p p e u r s
Support et ressources destins aux dveloppeurs
Borland fournit de nombreuses options de support et ressources
dinformation pour aider les dveloppeurs tirer le meilleur parti de leurs
produits Borland. Ces options comprennent des programmes de support
technique Borland, ainsi que des services gratuits sur Internet, o vous
pouvez consulter notre importante base dinformations et entrer en
contact avec dautres utilisateurs de produits Borland.
Comment contacter le support technique de Borland
Borland propose divers programmes de support destins aux clients et
aux futurs clients. Vous pouvez choisir parmi plusieurs catgories de
support, allant de linstallation des produits Borland au support tarif de
niveau consultant, en passant par une assistance complte.
Pour obtenir des informations sur les services Borland de support aux
dveloppeurs, veuillez consulter notre site Web, ladresse
http://www.borland.fr/support/.
Quand vous contacterez le support, prparez des informations compltes
sur votre environnement, la version du produit que vous utilisez et une
description dtaille du problme.
Pour avoir de laide sur les outils tiers, ou leur documentation, contactez
votre fournisseur.
Ressources en ligne
Vous pouvez obtenir des informations depuis les sources ci-aprs :
World Wide Web
Consultez rgulirement www.borland.fr/jbuilder. Lquipe produit de
JBuilder y place notes techniques, analyses des produits concurrents,
rponses aux questions frquemment poses, exemples dapplications,
mises jour du logiciel et informations sur les produits existants ou
nouveaux.
World Wide Web http://www.borland.fr/
http://www.borland.com/techpubs/jbuilder/
Bulletins
lectroniques
Pour vous abonner aux bulletins lectroniques,
utilisez le formulaire en ligne :
http://www.borland.fr/products/newsletters/
index.html
I n t r o d u c t i o n 1-11
S u p p o r t e t r e s s o u r c e s d e s t i n s a u x d v e l o p p e u r s
Vous pouvez vous connecter en particulier aux URL suivantes :
http://www.borland.fr/jbuilder/ (mises jour du logiciel et autres
fichiers)
http://www.borland.com/techpubs/jbuilder/ (mises jour de la
documentation et autres fichiers)
http://community.borland.com/ (contient notre magazine dinformations
web pour les dveloppeurs)
Groupes de discussion Borland
Quand vous vous inscrivez JBuilder, vous pouvez participer de
nombreux groupes de discussion ddis JBuilder. Les groupes de
discussion Borland permettent la communaut mondiale dutilisateurs
dchanger des astuces et des techniques concernant les produits Borland,
ainsi que les outils et technologies associs.
Vous trouverez des groupes de discussion, anims par les utilisateurs,
pour JBuilder et dautres produits Borland, ladresse
http://www.borland.com/newsgroups/.
Groupes de discussion Usenet
Les groupes Usenet suivants sont ddis Java et concernent la
programmation :
news:comp.lang.java.advocacy
news:comp.lang.java.announce
news:comp.lang.java.beans
news:comp.lang.java.databases
news:comp.lang.java.gui
news:comp.lang.java.help
news:comp.lang.java.machine
news:comp.lang.java.programmer
news:comp.lang.java.security
news:comp.lang.java.softwaretools
Remarque Ces groupes de discussion sont maintenus par les utilisateurs et ne sont
pas des sites Borland officiels.
1-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
S u p p o r t e t r e s s o u r c e s d e s t i n s a u x d v e l o p p e u r s
Rapports de bogues
Si vous pensez avoir trouv un bogue dans le logiciel, merci de le signaler
Borland, sur lun des sites suivants :
Page du support dveloppeur de JBuilder, ladresse
http://www.borland.com/devsupport/emea/. Cliquez sur le lien Reporting
Defects pour afficher le formulaire de saisie.
Quality Central, ladresse http://qc.borland.com. Suivez les
instructions de la page Quality Central dans la section Bugs Reports.
Quand vous signalez un bogue, indiquez toutes les tapes ncessaires la
reproduction de ce bogue, ainsi que tout paramtre spcial de votre
environnement et les autres programmes utiliss avec JBuilder. Prcisez
bien le comportement attendu et ce qui sest rellement pass.
Si vous avez des commentaires (compliments, suggestions ou questions)
destins aux rdacteurs de la documentation de JBuilder, vous pouvez
envoyer un e-mail jpgpubs@borland.com. Uniquement pour la
documentation. Les questions de support doivent tre adresses au
support dveloppeur.
JBuilder est fait par des dveloppeurs pour des dveloppeurs. Nous
apprcions vraiment vos remarques.
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-1
C h a p i t r e
2
Chapitre2Les applications de bases
de donnes JBuilder
On appelle application de base de donnes toute application accdant
des donnes stockes et permettant de les visualiser et, ventuellement, de
les modifier ou de les manipuler. Le plus souvent, ces donnes sont
stockes dans une base de donnes. Les donnes peuvent cependant tre
stockes dans des fichiers texte ou dans dautres formats. JBuilder permet
daccder ces informations et de les manipuler en utilisant les proprits,
les mthodes et les vnements dfinis dans les paquets DataSet de la
bibliothque de composants DataExpress et dans le paquet dbSwing.
Une base de donnes demandant des informations une telle source de
donnes est appele une application client. Un gestionnaire de bases de
donnes grant les demandes de donnes de divers clients est appel un
serveur de bases de donnes.
Architecture des applications de bases de donnes
Larchitecture DataExpress de JBuilder est centre sur la construction
entirement Java dapplications client-serveur, dapplets, de servlets et de
pages JavaServer (JSP) pour Internet ou intranet. Comme les applications
ralises avec JBuilder sont entirement en Java lexcution, elles sont
multiplates-formes.
Les applications JBuilder communiquent avec les serveurs de bases de
donnes en utilisant lAPI JDBC, la spcification de connectivit de base
de donnes Sun. JDBC est lAPI standard entirement Java permettant
daccder aux donnes des bases de donnes et de les manipuler. Les
applications de bases de donnes JBuilder peuvent se connecter toutes
les bases de donnes disposant dun pilote JDBC.
2-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o m p o s a n t s D a t a E x p r e s s
Le diagramme suivant illustre lorganisation dune base de donnes
standard et les diffrentes couches entre lapplication de base de donnes
client DataExpress JBuilder et la source de donnes :
Figure 2.1 Diagramme dune application de base de donnes standard
La section suivante, Composants DataExpress, prsente les composants
de larchitecture DataExpress avec plus de dtails.
Composants DataExpress
DataExpress est un paquet, com.borland.dx.dataset, de classes et
dinterfaces Borland qui apportent les fonctions basiques daccs aux
donnes. Ce paquet dfinit galement les classes de base fournisseur et
rsolveur, ainsi quune classe DataSet abstraite tendue aux autres objets
DataSet. Ces classes fournissent laccs aux informations stockes dans les
bases de donnes ou les autres sources de donnes. Ce paquet comprend
les fonctionnalits couvrant les trois phases principales de la gestion des
donnes :
Acquisition
Fonction gnrale qui obtient les donnes et gre les ensembles de
donnes locaux. (Les connexions des serveurs distants spcifiques
JDBC sont gres par des classes du paquet com.borland.dx.sql.dataset.)
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-3
C o m p o s a n t s D a t a E x p r e s s
Manipulation
Navigation et modification des donnes en local.
Rsolution
Routines gnrales de mise jour des donnes, du DataSet local vers la
source originelle des donnes. (La rsolution sur des serveurs distants
des modifications des donnes via JDBC sont gres par des classes du
paquet com.borland.dx.sql.dataset.)
Principales fonctionnalits et avantages
Les composants DataExpress sont modulaires afin de permettre la
sparation des fonctionnalits. Cette conception permet aux composants
DataExpress de grer une grande varit dapplications. La modularit de
larchitecture DataExpress repose sur les caractristiques suivantes :
Fonctionnalit de DataSet intgre
Cest une collection de fonctions de gestion des donnes, accessibles
aux applications avec DataExpress. Beaucoup de ces fonctions peuvent
tre appliques par la dfinition explicite de proprits et
dvnements. Parmi ces fonctions : la navigation, laccs aux donnes
et leur mise jour, le classement et le filtrage des donnes, le support
des relations matre-dtail, les rfrences, les contraintes, les valeurs
par dfaut, etc.
Indpendance par rapport aux sources de donnes
La lecture et lactualisation des donnes dune source de donnes
comme un serveur Oracle ou Sybase sont isoles dans deux principales
interfaces : Provider, lacquisition, et Resolver, la rsolution. Isoler la
recherche et la mise jour des donnes facilite la cration des nouveaux
composants Provider/Resolver destins aux nouvelles sources de
donnes. Il existe deux implmentations Provider/Resolver pour les
pilotes JDBC standard ; elles fournissent un accs aux bases de donnes
telles Oracle, Sybase, Informix, InterBase, DB2, MS SQL Server,
Paradox, dBase, FoxPro, Access, et bien dautres. Vous pouvez aussi
crer les implmentations des composants Provider/Resolver
personnalises pour les EJB, les serveurs dapplication, SAP, BAAN,
IMS, CICS, etc.
Stockage intgr
Lorsque les donnes sont trouves par un processus dacquisition, elles
sont mises en cache dans le DataSet. Toutes les modifications apportes
au DataSet cach sont suivies de sorte que les implmentations du
processus de rsolution savent celles qui demandent une mise jour
dans la source de donnes. DataExpress fournit deux options pour ce
stockage en cache : MemoryStore (par dfaut) et JDataStore.
2-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o m p o s a n t s D a t a E x p r e s s
MemoryStore met en cache toutes les donnes et en mmoire les
modifications. JDataStore utilise une base de donnes entirement Java,
faible encombrement, ultra-performante et incorporable pour mettre
en cache les donnes et leurs modifications. Le JDataStore est idal pour
linformatique dconnecte ou mobile, la rplication non synchrone des
donnes et les applications de bases de donnes faible encombrement.
Support de la liaison de donnes pour les composants visuels
Les composants DataSet de DataExpress fournissent une puissante
interface de programmation ainsi que le support de la liaison de
donnes directe pour les composants orients donnes grce la
dfinition de proprits par simple pointer-cliquer dans le concepteur
visuel. JBuilder est livr avec des composants visuels bass sur Swing
qui se lient directement aux composants DataSet.
Lutilisation de larchitecture modulaire de DataExpress prsente les
avantages suivants :
Informatique en rseau
Comme indiqu prcdemment, lapproche acquisition/rsolution
isole les interactions des sources de donnes en deux points exactement
dfinis. Cette approche offre deux autres avantages :
Le processus dacquisition/rsolution peut facilement tre
dcompos en faveur dun niveau intermdiaire. La logique
dacquisition/rsolution possdant typiquement une nature
transactionnelle est idalement adapte au partitionnement sur un
niveau intermdiaire.
Cest un modle de traitement sans tat idalement adapt
linformatique en rseau. La connexion entre le client composant
DataSet et la source de donnes peut tre interrompue aprs
lacquisition. Lorsque les modifications doivent tre enregistres
dans la source, la connexion na besoin dtre rtablie que pour la
dure de la transaction de rsolution.
Dveloppement rapide des interfaces utilisateur
Les composants DataSet pouvant tre lis aux composants orients
donnes par la simple dfinition dune proprit, ils sont idalement
adapts la construction rapide des interfaces utilisateur des
applications de bases de donnes.
Informatique mobile
Avec lintroduction du composant DataStore, les applications
DataExpress disposent dune base de donnes persistante et portable. Le
DataStore peut contenir plusieurs composants DataSet, des fichiers
quelconques et des objets Java. Cela permet de conserver ltat complet
dune application dans un seul fichier. Les composants DataSet
intgrent des techniques de rplication des donnes, permettant que les
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-5
C o m p o s a n t s D a t a E x p r e s s
modifications apportes aux donnes rpliques soient enregistres et
rconcilies dans leur source.
Applications imbriques
Le faible encombrement, les hautes performances de la base de donnes
JDataStore supportent idalement lincorporation des applications et
acceptent toutes les fonctionnalits et toute la smantique du
composant DataSet.
Pour plus dinformations sur larchitecture DataExpress, visitez le site Web
Borland, ladresse http://www.borland.fr/jbuilder/.
Prsentation des composants DataExpress
Les fonctionnalits de base ncessaires la connexion de donnes sont
proposes par les paquets com.borland.dx.dataset,
com.borland.dx.sql.dataset et com.borland.datastore. Les composants de ces
paquets encapsulent la connexion de lapplication avec la source de
donnes et les comportements ncessaires la manipulation des donnes.
Les caractristiques proposes par ces paquets grent la connexion avec
les bases de donnes ainsi que les fonctionnalits dun ensemble de
donnes.
Les classes et les composants principaux des paquets Borland consacrs
aux bases de donnes sont numrs dans le tableau ci-dessous avec une
brve description. La colonne de droite du tableau indique les proprits
les plus couramment utilises de la classe ou du composant. Certaines
proprits sont elles-mmes des objets regroupant plusieurs proprits.
Le nom de ces objets proprit complexe se termine par le mot Descriptor
et ces objets contiennent des proprits essentielles qui doivent,
gnralement, tre initialises pour que le composant soit utilis.
Composant/
Classe Description Proprits couramment utilises
Database Ncessaire pour accder aux donnes stockes
dans un serveur distant, le composant Database
gre la connexion JDBC avec la base de
donnes dun serveur SQL.
Pour davantage dinformations sur ce
composant et son utilisation, voir Chapitre 4,
Connexion une base de donnes.
Lobjet ConnectionDescriptor stocke les
proprits de connexion spcifiant le
pilote, lURL, le nom dutilisateur et le
mot de passe. On accde cet objet via
la proprit connection.
2-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o m p o s a n t s D a t a E x p r e s s
DataSet Une classe abstraite qui dfinit le
comportement par dfaut dun ensemble de
donnes, DataSet sert galement
dinfrastructure au stockage de donnes en
grant un tableau deux dimensions organis
en lignes et en colonnes. Elle implmente le
concept de position de la ligne en cours, ce qui
permet de parcourir les lignes de donnes et de
grer un pseudo enregistrement contenant
un enregistrement nouveau ou modifi jusqu
ce quil soit valid dans le DataSet. Etant donn
quil tend ReadWriteRow, DataSet dispose de
mthodes de lecture et dcriture de valeurs de
champ.
Lobjet SortDescriptor contient des
proprits affectant lordre dans lequel
on accde aux donnes et celui de leur
affichage dans un composant dinterface
utilisateur. On accde cet objet via la
proprit sort. Pour les instructions
dutilisation, voir Tri des donnes,
page 11-9.
Lobjet MasterLinkDescriptor contient des
proprits grant une relation
matre-dtail entre deux composants
DataSet. On accde cet objet via la
proprit masterLink de lensemble de
donnes dtail. Pour les instructions
dutilisation, voir Chapitre 9,
Etablissement dune relation
matre-dtail.
StorageDataSet Une classe qui tend DataSet en fournissant une
implmentation du stockage des donnes et de
la manipulation de la structure du DataSet.
Un composant StorageDataSet est rempli avec
les donnes en extrayant des informations
dune base de donnes distante (par exemple,
InterBase ou Oracle) ou en important les
donnes stockes dans un fichier texte. Pour ce
faire, il faut instancier lune de ses
sous-classes : QueryDataSet, ProcedureDataSet ou
TableDataSet.
La proprit tableName spcifie la source
de donnes du composant
StorageDataSet.
La proprit maxRows dfinit le nombre
maximum de lignes contenues
initialement dans le DataSet.
La proprit readOnly contrle laccs en
criture aux donnes.
DataStore Le composant DataStore propose un
remplacement de MemoryStore qui offre un
stockage permanent des donnes. Un
JDataStore offre un cache des donnes
performant et une persistance compacte pour
des ensembles de donnes DataExpress, des
fichiers quelconques ou des objets Java. Le
composant DataStore utilise un seul fichier pour
stocker un ou plusieurs flux de donnes. Un
fichier JDataStore utilise une structure de
rpertoire associant un nom et un tat de
rpertoire chaque flux de donnes. JDataStore
peut tre trait comme toute base de donnes
SQL - vous pouvez vous y connecter comme
tout serveur, y excuter des requtes SQL, etc.
Pour davantage dinformations sur le
composant DataStore, voir JDataStore et
JBuilder, page 2-13, dans ce manuel, et le
Guide du dveloppeur JDataStore.
Le stockage et la mise en cache des
composants StorageDataSet dans un
DataStore seffectuent grce la
dfinition de deux proprits du
StorageDataSet : store et storeName. Par
dfaut, quand la proprit store nest
pas dfinie, tous les StorageDataSet
utilisent un MemoryStore. Actuellement
MemoryStore et DataStore sont les seules
implmentations possibles de la
proprit store. La proprit storeName
contient le nom unique associ ce
StorageDataSet dans DataStore.
Composant/
Classe Description Proprits couramment utilises
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-7
C o m p o s a n t s D a t a E x p r e s s
DataStoreDriver DataStoreDriver est le pilote JDBC pour le
JDataStore. Le pilote gre laccs local et distant.
Ces deux types daccs ncessitent un nom
dutilisateur (toute chane sans configuration
ncessaire). Le mot de passe peut tre vide si le
JDataStore nest pas crypt. Sinon, un mot de
passe non nul doit tre fourni.
QueryDataSet Le composant QueryDataSet stocke le rsultat
dune chane de requte excute sur un
serveur distant. Ce composant fonctionne avec
le composant Database pour se connecter aux
bases de donnes dun serveur SQL et pour
excuter la requte spcifie avec ou sans
paramtres. Lorsque les donnes rsultantes
sont stockes dans le composant QueryDataSet,
vous pouvez manipuler les donnes en
utilisant lAPI duDataSet.
Pour davantage dinformations sur ce
composant et son utilisation, voir
Interrogation dune base de donnes,
page 5-2.
Lobjet QueryDescriptor contient
linstruction de la requte SQL, les
paramtres de la requte et les
informations sur la connexion la base
de donnes. On accde cet objet en
utilisant la proprit query.
ProcedureDataSet Le composant ProcedureDataSet contient le
rsultat dune procdure stocke excute sur
une base de donnes distante. Ce composant
fonctionne associ au composant Database de la
mme manire que le composant QueryDataSet.
Pour plus dinformations sur ce composant et
son utilisation, voir Chapitre 6, Utilisation
des procdures stockes.
Lobjet ProcedureDescriptor contient
linstruction SQL, les paramtres, le
composant base de donnes et dautres
proprits. On accde cet objet via la
proprit procedure du composant
ProcedureDataSet.
TableDataSet Utilisez ce composant pour importer des
donnes dun fichier texte. Ce composant tend
la classe DataSet. Il simule les fonctionnalits
dun serveur SQL sans passer par une
connexion avec un serveur SQL.
Pour une description dtaille de ce composant
et des instructions dutilisation, voir
Chapitre 3, Importation et exportation
des donnes dun fichier texte, et le tutoriel
associ, Chapitre 16, Tutoriel : Importation
et exportation des donnes dun fichier texte.
La proprit (hrite) dataFile spcifie le
nom de fichier dans lequel se trouve les
donnes charger dans lensemble de
donnes et dans lequel les enregistrer.
DataSetView Ce composant propose une autre vue des
donnes dun objet StorageDataSet existant. Il
dispose de sa propre proprit (hrite) sort, ce
qui permet une prsentation des donnes dans
un ordre diffrent. Il dispose galement de
fonctionnalits de tri et de navigation
indpendantes de son StorageDataSet associ.
Pour une description dtaille de ce composant
et des instructions dutilisation, voir
Prsentation de plusieurs vues des donnes,
page 12-23.
La proprit storageDataSet indique le
composant contenant les donnes dont
le DataSetView prsente une vue.
Composant/
Classe Description Proprits couramment utilises
2-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o m p o s a n t s D a t a E x p r e s s
Colonne Un objet colonne reprsente la collection de
toutes les lignes dun lment de donnes
particulier, par exemple toutes les valeurs du
champ Nom dune table. Une colonne obtient ses
valeurs quand un ensemble de donnes est
instanci ou comme rsultat dun calcul.
Lobjet Column est gr par son composant
StorageDataSet.
Pour une description dtaille de ce composant
et des instructions dutilisation, voir
Chapitre 7, Manipulation des colonnes.
Il est pratique de dfinir des proprits
au niveau de la colonne afin que le
paramtrage de toute la colonne de
donnes soit dfini en une seule fois, par
exemple la fonte (font). Les outils de
conception de JBuilder permettent
daccder aux proprits de colonne en
double-cliquant sur un StorageDataSet
dans le volet contenu, puis en
slectionnant la colonne sur laquelle
vous voulez travailler. Les proprits et
les vnements du composant Column
slectionn apparaissent soit dans le
concepteur de colonne (proprits
uniquement), soit dans linspecteur, et
peuvent tre modifis dans lun ou dans
lautre.
DataRow Le composant DataRow est une collection de
toutes les donnes des colonnes pour une seule
ligne, en considrant que chaque ligne contient
un enregistrement dinformations complet. Le
composant DataRow utilise les mmes colonnes
que le DataSet avec lequel il a t construit. Les
noms des colonnes dans un DataRow sont des
noms de champ.
Un composant DataRow est pratique utiliser
pour comparer les valeurs de deux lignes ou
pour rechercher des donnes dans un DataSet. Il
peut tre utilis dans toutes les mthodes de
DataSet qui attendent un ReadRow ou un
ReadWriteRow.
ParameterRow Le composant ParameterRow possde une Column
pour chaque colonne de lensemble de donnes
associ que vous pouvez vouloir dans la
requte. Placez les valeurs qui devront tre
utilises par la requte dans le ParameterRow et
associez-les la requte par les noms de leurs
paramtres (qui sont les noms des colonnes
ParameterRow).
Pour une description dtaille de ce composant
et des instructions dutilisation, voir
Utilisation de requtes paramtres pour
obtenir des donnes dune base de donnes,
page 5-12.
Composant/
Classe Description Proprits couramment utilises
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-9
C o m p o s a n t s D a t a E x p r e s s p o u r E J B
Il y a dans les paquets com.borland.dx.dataset, com.borland.dx.sql.dataset et
com.borland.datastore de nombreux composants et classes, ainsi que des
classes utilitaires dans dautres paquets comme les paquets util ou view.
Vous trouverez des informations dtailles sur les paquets et les classes de
la bibliothque DataExpress dans la Rfrence de la bibliothque des composants
DataExpress.
Composants DataExpress pour EJB
Le paquet DataExpress pour EJB, com.borland.dx.ejb contient les
composants DataExpress pour EJB. Ces composants permettent dacqurir
des donnes partir de beans entit EJB dans des ensembles de donnes
DataExpress, puis deffectuer la rsolution des modifications apportes
aux ensembles de donnes dans les beans entit.
Le paquet DataExpress pour EJB nest pas trait dans ce manuel. Pour
davantage dinformations sur lutilisation de composants appartenant au
paquet DataExpress pour EJB afin de dvelopper des applications
dentreprise orientes donnes, voir Utilisation de DataExpress pour les
composants EJB dans Dveloppement des Enterprise JavaBeans. Pour les
informations de rfrence, reportez-vous la documentation API du
paquet com.borland.dx.ejb.
DataModule DataModule est une interface du paquet
com.borland.dx.dataset. Une classe qui
implmente DataModule sera reconnue par le
concepteur JBuilder comme une classe
contenant divers composants dataset groups
en un modle de donnes. Pour crer un
module de donnes vide, double-cliquez sur
licne Module de donnes dans la galerie
dobjets (Fichier|Nouveau). En utilisant
ensuite la palette des composants et le volet
contenu, vous pouvez y placer divers objets
dataset et dfinir des connexions, des requtes,
des tris ou la logique de rgles de gestion
personnalises. Les modules de donnes
simplifient la rutilisation et le partage de
collections de composants dataset. Par
exemple, plusieurs classes dinterface
utilisateur dune application peuvent utiliser
une instance partage dun module de donnes
personnalis.
Pour une description dtaille de ce composant
et des instructions dutilisation, voir
Chapitre 10, Utilisation des modules
de donnes pour simplifier laccs aux
donnes.
Composant/
Classe Description Proprits couramment utilises
2-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r n e t B e a n s E x p r e s s
InternetBeans Express
Le paquet InternetBeans Express, com.borland.internetbeans, fournit des
composants et une bibliothque de balises JSP, permettant de gnrer la
couche prsentation dune application web, et dy rpondre.
La paquet InternetBeans Express nest pas trait dans ce manuel. Pour
davantage dinformations sur lutilisation de composants appartenant au
paquet InternetBeans Express afin de dvelopper des applications JSP et
servlets orients donnes, voir InternetBeans Express dans le Guide du
dveloppeur dapplications web. Pour les informations de rfrence,
reportez-vous la documentation API du paquet
com.borland.internetbeans.
Composants de bases de donnes XML
Les composants de bases de donnes XML de JBuilder supportent le
dveloppement des applications de bases de donnes XML. Les
composants peuvent tre ajouts depuis la page XML de la palette de
composants dans le concepteur dinterface utilisateur. Il existe des
composants bass sur des modles et des composants bass sur des
templates. Les composants bass sur des modles utilisent un document
daffectation qui dtermine la faon dont les donnes sont transfres
entre une structure XML et les mtadonnes dune base de donnes. Pour
utiliser des composants bass sur des templates, vous fournissez une
instruction SQL et le composant gnre un document XML. Linstruction
SQL fournie sert de template remplac dans le document XML en tant que
rsultat de lapplication du template.
Lutilisation des composants de bases de donnes XML nest pas traite
dans ce manuel. Pour plus dinformations, voir Utilisation des
composants de bases de donnes XML de JBuilder dans le Guide du
dveloppeur XML. Pour les informations de rfrence, reportez-vous la
documentation API des paquets com.borland.jbuilder.xml.database.common,
com.borland.jbuilder.xml.database.template,
com.borland.jbuilder.xml.database.xmldbms.
dbSwing
Le paquet dbSwing permet de concevoir une application de base de
donnes tirant profit de larchitecture des composants Swing Java. En plus
de sous-classes orientes donnes prdfinies pour la plupart des
composants Swing, dbSwing propose galement divers composants
utilitaires conus spcifiquement pour le dveloppement dapplication
utilisant DataExpress et JDataStore.
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-11
d b S w i n g
Pour crer une application de base de donnes, vous devez tout dabord la
connecter une base de donnes et alimenter en donnes un ensemble de
donnes. La section Accs aux donnes des exemples, page 11-2, permet
de dfinir une requte utilisable comme point de dpart pour la cration
dune application de base de donnes et dune interface utilisateur
lmentaire.
Pour utiliser les composants dbSwing orients donnes,
1 Ouvrez le fichier Cadre puis slectionnez longlet Conception.
2 Slectionnez un des onglets dbSwing : dbSwing, dbSwing
supplmentaires ou Modles dbSwing.
3 Cliquez sur un composant de la palette puis cliquez dans le concepteur
dinterface utilisateur afin de placer le composant dans lapplication.
4 Slectionnez le composant dans larborescence des composants ou dans
le concepteur dinterface utilisateur.
Selon le type de composant et la valeur de la proprit layout du
contentPane contenant le composant, le concepteur affiche des poignes
de redimensionnement de couleur noire sur les bords du composant.
Certains composants (JdbNavToolBar et JdbStatusLabel) se lient
automatiquement aux donnes ayant la focalisation. Pour dautres
(comme JdbTable), initialisez leurs proprits dataSet et/ou columnName
dans linspecteur afin de les lier un DataSet instanci.
La liste suivante contient quelques composants dbSwing disponibles
depuis la page dbSwing de la palette de composants :
TableScrollPane
JdbTable
JdbNavToolBar
JdbStatusLabel
JdbTextArea
JdbComboBox
JdbLabel
JdbList
JdbTextPane
JdbTextField
dbSwing offre des avantages significatifs par rapport Swing grce des
fonctionnalits amliores et une orientation donnes. De plus, dbSwing
est totalement lger, fournit une prise en charge de lapparence pour
plusieurs plates-formes et se conforme aux normes Swing. En utilisant des
composants dbSwing, vous tes sr que tous vos composants sont
compacts.
Pour plus dinformations sur le paquet dbSwing, consultez la
documentation API dbSwing.
2-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
M o d u l e s d e d o n n e s e t m o d e l e u r d e d o n n e s
Modules de donnes et modeleur de donnes
Les modules de donnes fournissent un conteneur aux composants
daccs aux donnes. Les modules de donnes simplifient le
dveloppement des applications de bases de donnes car ils permettent de
dcomposer le code en modules et de sparer les rgles de fonctionnement
et la logique daccs aux bases de donnes davec la logique de linterface
utilisateur de vos applications. Vous pouvez galement garder le contrle
sur lutilisation du module de donnes, en fournissant seulement les
fichiers classe aux dveloppeurs dapplication.
Le Modeleur de donnes est un expert qui aide construire des modules
de donnes encapsulant une connexion une base et les requtes
excuter sur cette base.
Pour plus dinformations sur les modules de donnes et le Modeleur de
donnes, voir Chapitre 10, Utilisation des modules de donnes pour
simplifier laccs aux donnes.
Pilote de base de donnes
Le pilote de base de donnes (Outils|Pilote de base de donnes) est un
navigateur de bases de donnes hirarchique, possdant des capacits
ddition.
Le pilote de base de donnes prsente les mta-informations JDBC des
bases de donnes dans une fentre deux volets. Le volet gauche contient
une arborescence qui affiche de faon hirarchique un ensemble de bases
de donnes et ses tables, vues, procdures stockes et mtadonnes
associes. Le volet droit affiche sur plusieurs pages des informations qui
dcrivent chaque nud de larborescence. Dans certains cas, il vous est
galement possible de modifier les donnes du volet droit.
Pour plus dinformations sur le pilote de base de donnes, voir
Chapitre 15, Administration dune base de donnes.
Moniteur JDBC
Le moniteur JDBC (Outils|Moniteur JDBC) est un outil graphique servant
surveiller le trafic JDBC. Le moniteur JDBC suivra tous les pilotes JDBC
(cest--dire toute sous-classe de java.sql.Driver ) utiliss par JBuilder. Le
moniteur JDBC suit toutes les sorties directement depuis le pilote JDBC.
Pour davantage dinformations sur le moniteur JDBC, y compris des
instructions dutilisation, voir Surveillance des connexions aux bases de
donnes, page 15-11.
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-13
J D a t a S t o r e e t J B u i l d e r
JDataStore et JBuilder
JDataStore est une solution de stockage de donnes de faible
encombrement, 100% entirement Java. [JDataStore est :
Une base de donnes relationnelle incorpore, avec des interfaces JDBC
et DataExpress, qui gre des transactions multi-utilisateurs non
bloquantes avec rcupration des erreurs.
Un stockage objet qui permet de stocker des objets srialiss, des
ensembles de donnes et dautres flux de fichier.
Un composant JavaBean qui peut tre manipul par des outils de
conception visuelle comme JBuilder.
Lexplorateur JDataStore visuel, tout-Java, vous permet de grer vos
DataStores.
Pour davantage dinformations sur lutilisation dun DataStore, voir le
Guide du dveloppeur JDataStore.
Utilisation dun JDataStore ou dun pilote JDBC
Les avantages configurer une application de base de donnes pour
quelle accde un systme de gestion de base de donnes relationnelles
avec des pilotes JDBC et configurer lapplication pour quelle utilise
JDataStore sont uniques. Les sections suivantes prsentent quelques
avantages associs chacune des approches.
Vous pouvez utiliser un pilote JDBC pour :
Utiliser une API JDBC sappuyant sur les standards
Manipuler des donnes SQL dynamiques - vous pouvez utiliser un
QueryProvider pour interroger une base de donnes SQL, manipuler des
donnes dynamiques et enregistrer les modifications en cas de
ncessit
Tirer parti de laccs distance avec RemoteJDBC
Remarque JDataStore peut tre utilis avec ou sans pilote JDBC. Dans la majorit des
exemples et des tutoriels de ce manuel, JDataStore st utilis avec des
pilotes JDBC. Le tutoriel Edition avec le JDataStore hors connexion dans
le Guide du dveloppeur JDataStore montre comment utiliser un composant
DataStore pour la modification des donnes hors connexion, plutt que
dtablir un connexion JDBC un serveur JDataStore.
Vous pouvez utiliser un JDataStore pour :
Travailler hors connexion - vous pouvez enregistrer et modifier des
donnes dans le systme de fichiers JDataStore et rsoudre les
modifications lorsque vous vous reconnectez la source de donnes
2-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
J D a t a S t o r e e t J B u i l d e r
Stocker des objets ainsi que des donnes
Manipuler des ensembles de donnes volumineux
Avantages supplmentaires apports par JDataStore
Vous pouvez vouloir utiliser un JDataStore pour une des raisons
suivantes :
Organisation.
Pour organiser les composants StorageDataSet dune application, les
fichiers et ltat des objets ou des JavaBean srialiss, laide dun
unique stockage persistant, ultra-performant, compact, portable et
entirement Java.
Rplication de donnes asynchrone.
Pour des modles informatiques mobile/hors connexion, les
StorageDataSet grent la rsolution/rconciliation des donnes
modifies obtenues depuis une source de donnes quelconque
(cest--dire JDBC, serveur dapplication, SAP, BAAN, etc.).
Applications embarques.
Lencombrement du JDataStore est trs rduit. Les composants
StorageDataSet procurent galement un excellent support de la liaison
de donnes pour les composants dinterface utilisateur orients
donnes.
Performance.
Pour amliorer les performances et conomiser la mmoire pour des
StorageDataSet volumineux. Avec un petit nombre de lignes de donnes,
les composants StorageDataSet utilisant le MemoryStore offrent un lger
gain de performance par rapport au DataStore. DataStore stocke les
donnes et index dun StorageDataSet dans un format trs compact. Ds
que le nombre de lignes dun StorageDataSet augmente, un
StorageDataSet utilisant un DataStore offre de meilleurs performances et
ncessite beaucoup moins de mmoire quun StorageDataSet utilisant un
MemoryStore.
Pour davantage dinformations sur lutilisation des JDataStore, voir le
Guide du dveloppeur JDataStore.
Utilisation de lexplorateur JDataStore
En utilisant lexplorateur JDataStore, vous pouvez :
Examiner le contenu dun DataStore. Le rpertoire du stockage est
affich dans un contrle arborescence, chaque ensemble de donnes
L e s a p p l i c a t i o n s d e b a s e s d e d o n n e s J B u i l d e r 2-15
J D a t a S t o r e e t J B u i l d e r
tant regroup avec ses index. Quand un flux de donnes est
slectionn dans larborescence, son contenu est affich (dans la mesure
ou lexplorateur peut afficher son contenu : fichier texte, .gif ou
ensemble de donnes).
Effectuer des oprations sur le stockage sans crire de code. Vous
pouvez crer un nouveau JDataStore, importer des fichiers texte
dlimit dans un ensemble de donnes, importer des fichiers dans des
flux de fichier, supprimer des index et des ensembles de donnes ou
vrifier lintgrit du JDataStore.
Grer les requtes qui fournissent des donnes aux ensembles de
donnes du stockage, modifier les ensembles de donnes et enregistrer
les modifications dans les tables dun serveur.
Utilisez la commande Outils|Explorateur JDataStore pour dmarrer
lexplorateur JDataStore.
Figure 2.2 Explorateur JDataStore
Oprations avec lexplorateur JDataStore
Pour crer un nouveau JDataStore,
1 Ouvrez lexplorateur JDataStore en choisissant Outils|Explorateur
JDataStore.
2 Choisissez Fichier|Nouveau ou cliquez sur le bouton Nouveau
JDataStore.
3 Entrez le nom du nouveau stockage et choisissez OK. Le stockage est
cr et ouvert dans lexplorateur.
Pour importer un fichier texte dans un ensemble de donnes,
1 Choisissez Outils|Importer|Texte vers table.
2-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r B a s e e t J B u i l d e r
2 Spcifiez le nom du fichier texte en entre et le nom dans le stockage de
lensemble de donnes crer.
Le contenu du fichier texte doit tre au format dlimit dans lequel
JBuilder exporte et il doit y avoir dans le rpertoire un fichier SCHEMA
(.schema) portant le mme nom pour dfinir la structure de lensemble
de donnes destination (pour crer un fichier .schema, voir Exportation
des donnes, page 3-3). Le nom de stockage par dfaut est celui du
fichier dentre, y compris lextension. Comme cette opration cre un
ensemble de donnes et non un flux de fichier, il est prfrable
domettre lextension dans le nom de stockage.
3 Cliquez sur OK.
Pour importer un fichier dans un flux de fichier,
1 Choisissez Outils|Importer|Fichier.
2 Fournissez un nom de fichier dentre et le nom de stockage. Cliquez
sur OK.
Pour vrifier lintgrit du JDataStore ouvert, choisissez Outils|Vrifier le
JDataStore ou cliquez sur le bouton Vrifier le JDataStore.
La totalit du stockage est vrifie et le rsultat est affich dans la fentre
Historique du vrificateur. Une fois la fentre historique ferme, vous
pouvez la rafficher en choisissant Voir|Historique du vrificateur.
Pour davantage dinformations sur lutilisation de lExplorateur
JDataStore, voir, dans le Guide du dveloppeur JDataStore, Administration
de JDataStore.
InterBase et JBuilder
Borland InterBase est une base de donnes relationnelles conforme aux
standards SQL haute performance et interplate-forme. InterBase inclut sa
propre version de la base de donnes employee, employee.gdb, afin que
vous utilisiez facilement InterBase au lieu de JDataStore dans les exemples
et les tutoriels. Pour plus dinformations sur la configuration dInterBase
et dInterClient pour leur utilisation dans les tutoriels, voir Connexion
une base de donnes en utilisant des pilotes JDBC InterClient, page 4-13.
Pour davantage dinformations sur InterBase ou pour tlcharger une
version dessai gratuite, voir le site web de Borland, ladresse
http://www.borland.fr/interbase/index.html.
I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 3-1
C h a p i t r e
3
Chapitre3Importation et exportation
des donnes dun fichier texte
Dans JBuilder, un composant TableDataSet permet de stocker les donnes
importes dun fichier texte. Une fois les donnes fournies lensemble de
donnes, il est possible de les visualiser et de les modifier. Pour
r-enregistrer les modifications dans le fichier texte, r-exportez-les dans
le fichier texte.
Pour importer les donnes dun fichier texte, utilisez un composant
TextDataFile pour spcifier lemplacement du fichier texte et les
paramtres spcifiques sa structure. Utilisez un StorageDataSet, par
exemple un composant TableDataSet, pour stocker localement les donnes
afin de les consulter et de les modifier. Crez des objets Column afin que le
composant TableDataSet connaisse le type de donnes et le nom de champ
pour chaque colonne de donnes.
Pour dfinir les colonnes dun composant TableDataSet, ajoutez des
colonnes dans la fentre Source, utilisez le concepteur dinterface
utilisateur ou chargez un fichier texte disposant dun fichier SCHEMA
(.schema) valide. Cette section dcrit les deux premires possibilits.
Limportation des donnes en utilisant un fichier SCHEMA existant est
traite par le Chapitre 16, Tutoriel : Importation et exportation des
donnes dun fichier texte. Votre fichier texte ne dispose dun fichier
SCHEMA valide que sil a t pralablement export par JBuilder.
Cette section traite les sujets suivants :
Ajout de colonnes un TableDataSet en utilisant lditeur
Importation des donnes formates dun fichier texte
Rcupration de donnes dune source JDBC
Exportation des donnes
3-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d e c o l o n n e s u n T a b l e D a t a S e t e n u t i l i s a n t l d i t e u r
Ajout de colonnes un TableDataSet en utilisant lditeur
Il est possible dajouter des colonnes au TableDataSet de deux manires :
visuellement dans le concepteur dinterface utilisateur ou avec du code
dans lditeur de longlet Source. Lajout de colonnes dans le concepteur
dinterface utilisateur est trait dans le Chapitre 16, Tutoriel :
Importation et exportation des donnes dun fichier texte. Si vous avez
dj export vers un fichier texte, JBuilder a cr un fichier SCHEMA qui
indique les dfinitions de colonnes quand le fichier texte est ouvert et il
nest pas ncessaire dajouter manuellement des colonnes.
Pour ajouter des colonnes en utilisant lditeur, dfinissez de nouveaux
objets Column dans la dfinition de classe de Cadre1.java, de la manire
suivante :
1 Slectionnez Cadre1.java dans le volet contenu, puis slectionnez
longlet Source. La dfinition de classe est affiche dans la fentre
Source. Ajoutez les lignes de code suivantes :
Column column1 = new Column();
Column column2 = new Column();
2 Trouvez la mthode jbInit() dans le code source. Dfinissez le nom de
la colonne et le type des donnes qui sont stockes dedans, de la
manire suivante :
column1.setColumnName("my_number");
column1.setDataType(com.borland.dx.dataset.Variant.SHORT);
column2.setColumnName("my_string");
column2.setDataType(com.borland.dx.dataset.Variant.STRING);
3 Ajoutez les nouvelles colonnes au TableDataSet dans la mme fentre
source et dans la mme mthode jbInit(), de la manire suivante :
tableDataSet1.setColumns(new Column[] { column1,column2 } );
4 Compilez lapplication pour lier les nouveaux objets Column lensemble
de donnes, puis ajoutez tout composant visuel adquat.
Importation des donnes formates dun fichier texte
Les donnes dune colonne dun fichier texte peuvent tre formates pour
lexportation des donnes de telle manire quil nest pas possible de les
importer correctement. Ce problme peut tre rsolu en spcifiant le
modle utiliser pour lire les donnes dans la proprit exportDisplayMask.
La proprit exportDisplayMask est utilise pour importer des donnes
lorsquil ny a pas de fichier SCHEMA associ au fichier texte. Sil existe
un fichier SCHEMA, ses paramtres ont la priorit. La syntaxe des
modles est dfinie dans Modles bass sur des chanes (masques), dans
la Rfrence de la bibliothque de composants DataExpress.
I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 3-3
R c u p r a t i o n d e d o n n e s d u n e s o u r c e J D B C
Les colonnes date et numriques ont des modles daffichage et de
modification par dfaut. Si vous ne dfinissez pas ces proprits, des
modles de saisie par dfaut sont utiliss. Les modles par dfaut
proviennent du fichier java.text.resources.LocaleElements qui correspond
aux valeurs locales par dfaut des colonnes. Si la localisation de la colonne
nest pas spcifie, la localisation de lensemble de donnes est utilise. Si
la localisation de lensemble de donnes nest pas dfinie, la localisation
par dfaut du systme est utilise. Laffichage dun nombre virgule
flottante comprend par dfaut trois chiffres aprs la virgule. Si vous
voulez plus de dcimales, spcifiez un masque.
Rcupration de donnes dune source JDBC
Le code suivant est un exemple de rcupration de donnes depuis une
source de donnes JDBC vers un TextDataFile. Une fois que les donnes
sont dans un TextDataFile, vous pouvez utiliser un StorageDataSet, par
exemple un composant TableDataSet, pour stocker les donnes en local afin
de les visualiser ou de les modifier. Pour davantage dinformations sur la
faon de la faire, voir Chapitre 16, Tutoriel : Importation et exportation
des donnes dun fichier texte.
Database db = new Database();
db.setConnection(new
com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:oracle:thin:@" +
datasource, username, password));
QueryDataSet qds = new QueryDataSet();
qds.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(db, "SELECT
* FROM THETABLE", null, true, Load.ALL));
TextDataFile tdf = new TextDataFile();
tdf.setFileName("THEDATA.TXT");
tdf.save(qds);
Ce code produit un fichier de donnes et le fichier SCHEMA associ.
Vous pouvez utiliser ce type daccs aux donnes pour crer une
application de sauvegarde et de restauration dune table de base de
donnes qui fonctionne depuis la ligne de commande. Pour enregistrer les
informations en retour dans la source de donnes JDBC, voir
Enregistrement dans une source de donnes JDBC des modifications
charges depuis un TextDataFile, page 3-5.
Exportation des donnes
Lexportation de donnes, ou lenregistrement de donnes dans un fichier
texte, enregistre toutes les donnes de la vue en cours dans un fichier texte,
en remplaant les donnes existantes. Cette section prsente plusieurs
manires dexporter les donnes. Vous pouvez rexporter des donnes,
3-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p o r t a t i o n d e s d o n n e s
qui ont t importes depuis un fichier texte, dans ce fichier ou dans un
autre fichier. Vous pouvez exporter les donnes dun QueryDataSet ou dun
ProcedureDataSet dans un fichier texte. Il est galement possible de
rsoudre les donnes dun TableDataSet dans une table SQL existante.
Lexportation des donnes dans un fichier texte est gre diffremment de
la rsolution dans une table SQL. QueryDataSet et TableDataSet sont des
composants StorageDataSet. Quand des donnes sont fournies lensemble
de donnes, le StorageDataSet surveille les informations dtat des lignes
(supprime, insre ou modifie) pour toutes les lignes. Quand les
donnes sont rsolues dans une source de donnes comme un serveur SQL,
les informations dtat des lignes sont utilises pour dterminer comment
les lignes sont ajoutes, retires ou modifies dans la table SQL. Quand
une ligne a t correctement rsolue, elle passe ltat rsolue
(RowStatus.UPDATE_RESOLVED, RowStatus.DELETE_RESOLVED ou
RowStatus.INSERT_RESOLVED). Si le StorageDataSet est une nouvelle fois rsolu,
les lignes dj rsolues ne sont pas prises en compte, sauf si des
modifications leur ont t apportes depuis la prcdente rsolution.
Quand des donnes sont exportes dans un fichier texte, toutes les donnes
de la vue en cours sont crites dans un fichier texte et les informations
dtat des lignes ne sont pas modifies.
Lexportation des donnes dans un fichier texte prend en compte les
critres de tri et de filtre en cours. Si un critre de tri est spcifi, les
donnes sont enregistres dans le fichier texte dans lordre spcifi par le
critre de tri. Si lordre des lignes est important, retirez le critre de tri
avant dexporter les donnes. Si un critre de filtre est spcifi, seules les
donnes vrifiant le critre de filtre sont enregistres. Cela est utile pour
enregistrer des sous-ensembles de donnes dans des fichiers distincts,
mais cela peut provoquer une perte de donnes si un fichier filtr
remplace malencontreusement un fichier de donnes existant.
Attention Retirez les critres de filtre avant denregistrer si vous voulez renregistrer
toutes les donnes dans le fichier dorigine.
Exportation des donnes dun QueryDataSet dans un
fichier texte
Lexportation des donnes dun QueryDataSet dans un fichier texte est
identique lexportation des donnes dun composant TableDataSet,
comme indiqu dans le Chapitre 16, Tutoriel : Importation et exportation
des donnes dun fichier texte. JBuilder cre un fichier SCHEMA qui
dfinit chaque colonne, son nom et son type de donnes afin que le fichier
puisse tre rimport plus facilement dans JBuilder.
Remarque Les colonnes BLOB ne sont pas exportes, elles sont ignores lorsque
dautres champs sont exports.
I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 3-5
E x p o r t a t i o n d e s d o n n e s
Enregistrement des modifications dun TableDataSet dans
une table SQL
Utilisez un objet QueryResolver pour rsoudre les modifications dans une
table SQL. Pour davantage dinformations sur lutilisation de
QueryResolver pour enregistrer des modifications dans une table SQL, voir
Personnalisation de la logique de rsolution par dfaut, page 8-16.
Avant de rsoudre les modifications dans une table SQL, dfinissez le
nom de la table et les noms des colonnes de la table SQL, comme lindique
lextrait de code suivant. La table SQL et le fichier SCHEMA doivent dj
exister. Le fichier SCHEMA applicable au TableDataSet doit correspondre
la structure de la table SQL. Les types de donnes variant des colonnes de
TableDataSet doivent correspondre aux types JDBC de la table du serveur.
Par dfaut, toutes les lignes ont ltat INSERT.
tabledataset1.setTableName(string);
tableDataSet1.SetRowID(columnName);
Enregistrement dans une source de donnes JDBC des
modifications charges depuis un TextDataFile
Par dfaut, les donnes sont charges partir dun TextDataFile avec le
statut deRowStatus.Loaded. Lappel de la mthode saveChanges() dun
QueryDataSet ou dun ProcedureDataSet nenregistrera pas les modifications
faites dans un TextDataFile car ces lignes ne sont pas encore considres
comme insres. Pour permettre aux modifications dtre enregistres et
pour que toutes les lignes charges depuis TextDataFile aient le status
INSERTED, dfinissez la proprit TextDataFile.setLoadAsInserted(true).
Dsormais, quand la mthode saveChanges() dun QueryDataSet ou dun
ProcedureDataSet sera appele, les donnes seront enregistres par retour
dans la source de donnes.
Pour davantage dinformations sur lutilisation de QueryResolver pour
enregistrer des modifications dans une table SQL, voir Personnalisation
de la logique de rsolution par dfaut, page 8-16.
3-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n n e x i o n u n e b a s e d e d o n n e s 4-1
C h a p i t r e
4
Chapitre4Connexion une base
de donnes
Pour vous servir des tutoriels portant sur les bases de donnes dcrits
dans cette documentation, vous devez installer le pilote JDBC JDataStore.
Le pilote JDBC InterClient peut galement tre utilis. Cette section
prsente la configuration de JDataStore et dInterClient dans le cadre
des tutoriels.
Sun a travaill en association avec des fournisseurs de bases de donnes et
doutils de bases de donnes pour crer une API indpendante du
gestionnaire de bases de donnes. Comme ODBC (lquivalent Microsoft
du JDBC), JDBC est bas sur la norme X/Open SQL CLI (Call Level
Interface). Il y a certaines diffrences entre JDBC et ODBC :
JDBC est une API entirement Java qui est rellement multiplate-forme.
ODBC est une interface en langage C qui doit tre implmente de
manire native. La plupart des implmentations ne fonctionnent que
sur des plates-formes Microsoft.
La plupart des pilotes ODBC ncessitent linstallation dun ensemble
complexe de modules et de paramtres de registre sur la station de
travail client. JDBC est une implmentation entirement en Java qui
peut sexcuter directement en local ou depuis un serveur distant
centralis. JDBC permet une maintenance et un dploiement plus
simple que ODBC.
JDBC est reconnu par les principaux fournisseurs de bases de donnes,
de connectivit et doutils, dont Oracle, Sybase, Informix, InterBase, DB2.
Plusieurs socits, dont Borland, ont des pilotes JDBC. Il est possible
dutiliser des pilotes ODBC existants grce au lien JDBC-ODBC fourni par
Sun. Lutilisation de ce lien JDBC-ODBC nest cependant pas une solution
idale car elle ncessite linstallation de pilotes ODBC et dentres de
4-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n n e x i o n a u x b a s e s d e d o n n e s
registre. Les pilotes ODBC sont galement implments de manire native
ce qui compromet la gestion multiplate-forme et la scurit des applets.
Les composants DataExpress de JBuilder sont implments en utilisant
lAPI de connexion de base de donnes Sun (JDBC). Pour crer une
application de donnes Java, le paquet JDBC sql de Sun doit tre
accessible. Si la connexion avec le serveur de base de donnes se fait via
un pilote ODBC, le logiciel de lien JDBC-ODBC de Sun est galement
ncessaire.
Pour davantage dinformations sur JDBC ou le lien JDBC-ODBC, visitez
la page JDBC Database Access API ladresse http://java.sun.com/
products/jdbc/.
Connexion aux bases de donnes
Vous pouvez connecter les applications JBuilder des tables SQL locales
ou distantes, ou aux bases de donnes cres par dautres applications
Borland comme C++ Builder ou Delphi.
Pour se connecter une base de donnes distante SQL, vous pouvez
utiliser lune ou lautre des solutions suivantes :
Un pilote JDBC pour le serveur. Certaines versions de JBuilder
proposent des pilotes JDBC. Lun de ces pilotes est InterClient.
Consultez le site web Borland, ladresse http://www.borland.fr/
jbuilder/, pour des informations sur la disponibilit des pilotes JDBC
dans votre version de JBuilder ou contactez le support technique de
lditeur de votre logiciel serveur pour savoir sil existe des pilotes
JDBC.
Un pilote ODBC pour votre serveur utilis avec le logiciel de lien
JDBC-ODBC.
Remarque Le pilote ODBC se trouve dans une DLL non portable. Cela peut
convenir pour un dveloppement local, mais ne convient pas pour des
applets ou des solutions entirement Java.
Lors de la connexion une base de donnes locale non SQL, comme celles
de Paradox ou de Visual dBASE, utilisez un pilote ODBC appropri au
type de table et au niveau daccs en conjonction avec le logiciel de lien
JDBC-ODBC.
Remarque Quand vous navez plus besoin dune connexion une base de donnes,
appelez explicitement, dans lapplication, la mthode
Database.closeConnection(). Ainsi, la connexion JDBC nest pas laisse
ouverte lorsque cela nest pas ncessaire et le recyclage de linstance de
cette connexion JDBC devient possible.
C o n n e x i o n u n e b a s e d e d o n n e s 4-3
C o n n e x i o n a u x b a s e s d e d o n n e s
Ajout dun composant Database votre application
Le composant Database est un composant spcifique JDBC qui gre une
connexion JDBC. Pour accder aux donnes avec un composant
QueryDataSet ou un composant ProcedureDataSet, vous devez dfinir la
proprit database du composant par un composant Database instanci.
Plusieurs ensembles de donnes peuvent utiliser, et utilisent
frquemment, la mme base de donnes.
Dans une application de base de donnes relle, vous placeriez
vraisemblablement le composant Database dans un module de donnes.
Car cela permet toutes les applications qui accdent la base de donnes
davoir une connexion commune. Pour plus dinformations sur les
modules de donnes, voir Chapitre 10, Utilisation des modules
de donnes pour simplifier laccs aux donnes.
Pour ajouter un composant Database une application,
1 Crez un nouveau projet et les fichiers de lapplication en utilisant
lexpert Application. Vous pouvez galement suivre ces instructions
pour ajouter la connexion de donnes un projet et une application
existant dj. Pour crer un nouveau projet et les fichiers de
lapplication :
a Choisissez Fichier|Fermer dans le menu JBuilder afin de fermer les
applications ouvertes.
Si vous neffectuez pas cette tape avant la suivante, les fichiers de la
nouvelle application sont ajouts au projet existant.
b Choisissez Fichier|Nouveau et double-cliquez sur licne
Application pour lancer lexpert application.
Acceptez ou modifiez les valeurs par dfaut pour les adapter vos
besoins.
2 Ouvrez le concepteur dinterface utilisateur en slectionnant le fichier
cadre (par exemple, Cadre1.java) dans le volet contenu, puis en
slectionnant longlet Conception en bas de lAppBrowser.
3 Slectionnez longlet DataExpress de la palette de composants et
cliquez sur le composant Database.
4 Cliquez dans la fentre du concepteur pour ajouter le composant
Database lapplication.
Ceci ajoute la ligne de code suivante dans la classe Cadre :
Database database1 = new Database();
4-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n n e x i o n a u x b a s e s d e d o n n e s
Le composant Database apparat dans le volet structure, sous laspect
suivant :
Figure 4.1 Composant DataBase affich dans le volet structure
Dfinition des proprits de connexion du composant
Database
La proprit connection du composant Database spcifie le pilote JDBC,
lURL de connexion, le nom dutilisateur et le mot de passe. LURL de la
connexion JDBC est le moyen utilis par le JDBC pour spcifier
lemplacement dun fournisseur de donnes JDBC (par exemple, le
serveur SQL). Il contient en fait toutes les informations ncessaires pour
effectuer une connexion y compris le nom dutilisateur et le mot de passe.
Il est possible daccder lobjet ConnectionDescriptor par programme, ou
de dfinir les proprits de connexion via linspecteur. Si vous accdez par
programme lobjet ConnectionDescriptor, respectez la procdure
suivante :
Si vous dfinissez promptPassword par true, vous devez galement
appeler openConnection() pour votre base de donnes. openConnection()
dtermine le moment o est affich le dialogue du mot de passe et le
moment o est effectue la connexion la base.
C o n n e x i o n u n e b a s e d e d o n n e s 4-5
C o n n e x i o n a u x b a s e s d e d o n n e s
Obtenez le nom dutilisateur et le mot de passe ds que souvre
lapplication. Pour cela, appelez openConnection() la fin de la mthode
jbInit() du cadre principal.
Si vous nouvrez pas la connexion de manire explicite, louverture sera
tente la premire fois quun composant ou un ensemble de donnes
aura besoin de donnes.
Les tapes suivantes dcrivent la manire de procder pour dfinir, via le
concepteur dinterface utilisateur, les proprits de connexion la base de
donnes JDataStore exemple, Employee.
Remarque Pour utiliser la base de donnes exemple, vous devez vous assurer que
votre systme est configur pour JDataStore. Si ce nest dj fait, voir
Configuration de JDataStore, page 4-7.
1 Slectionnez database1 dans larborescence des composants.
2 Slectionnez la valeur de la proprit connection dans linspecteur et
cliquez sur les points de suspension (...) pour ouvrir lditeur de la
proprit Connection.
3 Dfinissez les proprits suivantes :
Proprit Description
Pilote Le nom de la classe du pilote JDBC correspondant lURL ;
pour cet exemple, slectionnez dans la liste
com.borland.datastore.jdbc.DataStoreDriver.
URL LURL (Universal Resource Locator) de la base de donnes,
pour cet exemple. La valeur par dfaut est
jdbc:borland:dslocal:directoryAndFile.jds. Cliquez sur le bouton
Parcourir pour slectionner la base de donnes JDataStore
locale, qui se trouve dans <jbuilder>/samples/JDataStore/
datastores/employee.jds. Utilisez le bouton Parcourir pour
slectionner ce fichier afin dviter les erreurs de frappe. Une
fois slectionn, lURL a laspect suivant :
Unix :
jdbc:borland:dslocal:/usr/local/<jbuilder>/samples/
JDataStore/
datastores/employee.jds
Windows :
jdbc:borland:dslocal:C:\jbuilder\samples\JDataStore\
datastores\
employee.jds
Nom
dutilisateur
Le nom dutilisateur autoris accder au serveur de bases de
donnes. Pour les tutoriels exemple, nimporte quel nom
fonctionne.
Mot de passe Le mot de passe de lutilisateur autoris. Pour les tutoriels,
aucun mot de passe nest requis.
Demander le
mot de passe
Prcise sil faut demander lutilisateur un mot de passe
louverture de la connexion la base de donnes.
4-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n n e x i o n a u x b a s e s d e d o n n e s
Le dialogue se prsente ainsi :
Figure 4.2 Bote de dialogue du descripteur de connexion
4 Cliquez sur le bouton Tester la connexion pour vrifier que les
proprits de connexion ont t correctement dfinies. Les rsultats de
lessai de connexion sont affichs ct du bouton Tester la connexion.
Si vous ne parvenez pas vous connecter la base de donnes exemple,
veillez configurer votre ordinateur pour quil utilise la base de
donnes JDataStore exemple. Voir Configuration de JDataStore,
page 4-7, pour plus dinformations.
5 Une fois la connexion russie, cliquez sur OK pour sortir de la bote de
dialogue et crire les proprits de connexion dans le code source.
Si vous avez suivi lexemple, le code source doit avoir laspect suivant :
database1.setConnection(new
com.borland.dx.sql.dataset.ConnectionDescriptor(
"jdbc:borland:dslocal:
<jbuilder>/samples/JDataStore/datastores/employee.jds", "admin", "",
false, "com.borland.datastore.jdbc.DataStoreDriver"));
6 Slectionnez un composant DBDisposeMonitor dans longlet dbSwing
supplmentaires et cliquez sur le volet Contenu pour lajouter
lapplication.
Le DBDisposeMonitor fermera le JDataStore lorsque la fentre sera ferme.
7 Dfinissez la proprit dataAwareComponentContainer du DBDisposeMonitor
par this.
Astuce Lorsquune connexion une URL de base de donnes russit, vous
pouvez utiliser le pilote de base de donnes pour examiner les
mta-informations JDBC de la base de donnes ou ses objets schma dans
le JDataStore, comme vous pouvez excuter des instructions SQL pour
examiner et modifier les donnes des tables existantes.
C o n n e x i o n u n e b a s e d e d o n n e s 4-7
C o n f i g u r a t i o n d e J D a t a S t o r e
Configuration de JDataStore
Pour afficher et explorer le contenu du JDataStore, utilisez lExplorateur
JDataStore. Pour dmarrer lExplorateur JDataStore, choisissez Outils|
Explorateur DataStore. Pour ouvrir le JDataStore exemple, naviguez
jusqu <jbuilder>/samples/JDataStore/datastores/employee.jds.
Pour davantage dinformations sur lExplorateur JDataStore, voir, dans le
Guide du dveloppeur de JDataStore, Administration de JDataStore.
Configuration dInterBase et InterClient
InterBase est un logiciel de gestion de bases de donnes relationnelles
compatible SQL qui est facile utiliser. InterBase est indpendant du
client et des outils ; il supporte la majorit des clients bureautiques et des
environnements de construction dapplications.
InterClient est un pilote JDBC entirement Java JDBC pour les bases de
donnes InterBase. InterClient contient une bibliothque de classes Java
qui implmentent la majorit de lAPI JDBC et une partie de ses
extensions. Elle agit avec le gestionnaire de pilotes JDBC pour permettre
aux applications et aux applets Java ct client dinteragir avec les bases
de donnes InterBase.
Remarque La version actuelle dInterClient utilise un pilote JDBC de type 4. Les
anciens pilotes de type 3 sont obsoltes. Tous les dveloppements venir
se feront avec le pilote de type 4.
Les dveloppeurs peuvent dployer leurs clients InterClient de deux
faons :
Les applets Java sont des programmes Java inclus dans une page HTML
avec la balise <APPLET>. Ils sont servis par un serveur web, visualiss
et utiliss sur un systme client dans un navigateur web compatible
Java. Cette mthode de dploiement ne ncessite pas dinstallation
manuelle du paquet InterClient sur le systme client. En revanche, elle
ncessite la prsence dun navigateur web compatible Java sur le
systme client.
Les applications Java sont des programmes Java autonomes excuts sur
un systme client. Cette mthode de dploiement requiert linstallation
du paquet InterClient et du JRE (Java Runtime Environment) sur le
systme client. Le JRE inclut le gestionnaire de pilotes JDBC.
Comme API entirement Java pour InterBase, InterClient permet le
dveloppement client/serveur indpendamment de la plate-forme pour
lInternet ou les intranets dentreprises. Un pilote entirement Java
prsente par rapport un pilote en code natif lavantage de pouvoir
dployer une applet InterClient sans charger de pilote JDBC spcifique
4-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n f i g u r a t i o n d I n t e r B a s e e t I n t e r C l i e n t
la plate-forme sur chaque systme client (les serveurs web envoient
automatiquement les classes InterClient avec les applets). De plus, il nest
pas ncessaire de grer des bibliothques de bases de donnes natives ce
qui simplifie ladministration et la maintenance des applications. Comme
partie dune applet Java, InterClient peut tre actualis dynamiquement ce
qui diminue encore le cot du dploiement et de la maintenance dune
application.
Utilisation dInterBase et dInterClient avec JBuilder
Pour utiliser InterBase et InterClient avec JBuilder, installez InterBase et
InterClient selon les instructions de la documentation InterBase, puis
dmarrez InterBase Server.
Si vous ne parvenez pas vous connecter, vrifiez que la base de donnes
InterBase sexcute. La base de donnes peut sexcuter sur la mme
machine que votre application, ou sur une machine diffrente. En
consquence, il y a de nombreuses configurations possibles. Il est
important que votre version InterClient soit compatible avec la version de
votre base de donne et de votre JDK. Pour davantage dinformations sur
ces sujets, veuillez vous reporter la documentation InterBase et
InterClient.
Si InterBase Server ne se trouve pas sur la mme plate-forme que JBuilder,
vous devez :
Vrifier quInterBase est excut sur le serveur.
Vrifier quInterClient est install sur le client.
Vrifier que, sur le client, lURL du Connection Descriptor contient
ladresse IP du serveur excutant InterBase.
Une fois InterClient install, ajoutez-le JBuilder en utilisant Outils|
Configuration Entreprise, puis ajoutez-le la liste des bibliothques
requises de votre projet, dans Projet|Proprits du projet. Pour plus
dinformations, voir Ajout dun pilote JDBC JBuilder, page 4-10.
Astuces pour lutilisation des tables InterBase exemple
Pour de meilleurs rsultats, veuillez noter les astuces suivantes concernant
le travail avec les tables exemple :
Faites une copie de sauvegarde de la base de donnes exemple.
Les bases de donnes fournies en tant quexemples sont installes par le
programme de configuration. Vous pouvez faire une copie du fichier
de la base de donnes, employee.gdb, afin de restaurer le fichier son tat
initial aprs vos essais de programmation des bases de donnes.
C o n n e x i o n u n e b a s e d e d o n n e s 4-9
C o n f i g u r a t i o n d I n t e r B a s e e t I n t e r C l i e n t
Ne transgressez pas les contraintes de la base de donnes.
Les bases de donnes exemple mettent en uvre de nombreuses
contraintes sur les valeurs des donnes, comme cest le cas dans une
application relle. Ces contraintes interviennent dans tous les exemples
o vous ajoutez, insrez ou modifiez les donnes de la table employee
et essayez denregistrer les modifications dans la table du serveur.
La table EMPLOYEE est frquemment utilise dans les exemples de
ce manuel. Les contraintes suivantes sappliquent la table
employee :
Tous les champs sont obligatoires (il faut saisir des donnes) sauf
PHONE_EXT.
EMP_NO est gnr, il nest donc pas ncessaire de le saisir pour
les nouveaux enregistrements. Cest galement la cl primaire, il
ne faut donc pas le modifier.
Intgrit rfrentielle.
DEPT_NO doit exister dans la table Department.
JOB_CODE, JOB_GRADE, JOB_COUNTRY doivent exister
dans la table JOB.
SALARY doit tre suprieur ou gal au champ min_salary de la
table job pour les champs correspondants job_code, job_grade et
job_country de la table job.
FULL_NAME est gnr par la requte, il nest donc pas
ncessaire de le saisir.
La table CUSTOMER est galement utilise dans les tutoriels de
bases de donnes. CUST_NO est gnr, il ne faut donc pas le saisir
pour les nouveaux enregistrements.
Lorsque vous travaillez avec les tables exemple, il est plus prudent de
ne modifier que les champs LAST_NAME, FIRST_NAME et
PHONE_EXT dans les enregistrements existants.
Pour voir les mtadonnes des tables exemple,
1 Choisissez Outils|Pilote de base de donnes.
Le pilote de base de donnes est utilis pour les tches dadministration
dune base de donnes.
2 Double-cliquez sur lURL de la base de donnes pour ouvrir une
connexion la base.
3 Dveloppez le nud Tables pour voir les informations relatives
chacune des tables exemple.
4-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d u n p i l o t e J D B C J B u i l d e r
Ajout dun pilote JDBC JBuilder
Aprs avoir install votre pilote JDBC en suivant les instructions du
constructeur, utilisez les tapes ci-dessous pour le configurer afin de
lutiliser avec JBuilder.
Remarque Les pilotes dsinstalls sont prsents en rouge dans la liste Pilotes de la
bote de dialogue Proprits de la connexion et ne peuvent pas tre
slectionns pour tre utiliss dans JBuilder. Vous devez les installer en
suivant les instructions du fabricant avant de les configurer dans JBuilder.
Cration des fichiers .library et .config
Lajout dun pilote de base de donnes JBuilder se fait en trois tapes :
Cration dun fichier bibliothque contenant les classes du pilote,
gnralement un fichier JAR, et tout autre fichier auxiliaire, comme la
documentation et le source.
Drivation dun fichier .config partir du fichier bibliothque que
JBuilder ajoute au dmarrage son chemin des classes.
Ajout dune nouvelle bibliothque votre projet, ou au projet par
dfaut si vous voulez la rendre disponible tous les nouveaux projets.
Les deux premires tapes seffectuent dans une bote de dialogue :
1 Ouvrez JBuilder et choisissez Outils|Configuration Entreprise.
2 Cliquez sur longlet Pilotes base de donnes dans la bote de dialogue
Configuration Entreprise.
Longlet Pilotes base de donnes affiche les fichiers .config de tous les
pilotes des bases de donnes alors dfinis.
3 Cliquez sur Ajouter pour ajouter un nouveau pilote, puis sur Nouveau
pour crer un nouveau fichier de bibliothque pour le pilote. Le fichier
bibliothque est utilis pour ajouter le pilote la liste des bibliothques
ncessaires aux projets.
Remarque Vous pourriez aussi crer une nouvelle bibliothque en utilisant
Outils|Configurer les bibliothques, mais, comme vous devez ensuite
utiliser Configuration Entreprise pour driver le fichier .config, il est
plus simple de tout faire au mme endroit.
4 Tapez le nom et slectionnez lemplacement du nouveau fichier dans la
bote de dialogue Cration dune nouvelle bibliothque.
5 Cliquez sur Ajouter et naviguez jusqu lemplacement du pilote. Vous
pouvez slectionner le rpertoire contenant le pilote et tous ses fichiers
associs ou slectionner seulement le fichier archive du pilote. Les deux
fonctionnent. JBuilder extraira les informations dont il a besoin.
C o n n e x i o n u n e b a s e d e d o n n e s 4-11
A j o u t d u n p i l o t e J D B C J B u i l d e r
6 Cliquez sur OK pour fermer le navigateur de fichiers. La nouvelle
bibliothque saffiche en bas de la liste des bibliothques, slectionne.
7 Cliquez sur OK. JBuilder cre un nouveau fichier .library dans le
rpertoire /lib de JBuilder, en utilisant le nom que vous avez indiqu
(par exemple, InterClient.library). Il vous ramne la page Pilotes base
de donnes qui affiche le nom du fichier .config correspondant, driv
du fichier bibliothque (par exemple, InterClient.config).
8 Slectionnez le nouveau fichier .config dans la liste des pilotes de base
de donnes, et cliquez sur OK. Le fichier .config est plac dans le
rpertoire /lib/ext de JBuilder.
9 Fermez JBuilder et relancez-le pour que les modifications apportes
aux pilotes de bases de donnes prennent effet, et que le nouveau pilote
soit plac dans le chemin des classes de JBuilder.
Important Si vous apportez des modifications au fichier .library aprs la gnration
du fichier .config, vous devrez rgnrer le fichier .config laide de
Configuration Entreprise, puis redmarrer JBuilder.
Ajout du pilote JDBC aux projets
Un projet excut dans JBuilder utilise uniquement le chemin des classes
dfini pour ce projet. Donc, pour tre certain que le pilote JDBC soit
disponible pour tous les nouveaux projets qui en auront besoin, dfinissez
la bibliothque et ajoutez-la votre liste par dfaut des bibliothques
ncessaires. Cela se fait dans JBuilder en utilisant les tapes suivantes :
1 Dmarrez JBuilder et fermez tous les projets ouverts.
2 Choisissez Projet|Proprits du projet par dfaut.
3 Slectionnez longlet Bibliothques ncessaires sur la page Chemins et
cliquez sur Ajouter.
4 Slectionnez le nouveau pilote JDBC dans la liste des bibliothques et
cliquez sur OK.
5 Cliquez sur OK pour fermer la bote de dialogue Proprits du projet
par dfaut.
Remarque Vous pouvez aussi ajouter le pilote JDBC un projet existant. Il suffit
douvrir le projet, de choisir Projet|Proprits du projet et dutiliser la
mthode prcdente.
Maintenant, JBuilder et le nouveau pilote JDBC sont configurs pour
fonctionner ensemble. Ltape suivante consiste crer ou ouvrir un
projet utilisant ce pilote, lui ajouter un composant Database et dfinir
sa proprit connection afin quil puisse utiliser ce pilote pour accder aux
donnes. Pour un exemple montrant comment faire, voir Connexion
une base de donnes en utilisant des pilotes JDBC InterClient, page 4-13.
4-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d u n p i l o t e J D B C J B u i l d e r
Le composant Database gre la connexion JDBC avec un serveur SQL. Il est
ncessaire toute application de base de donnes utilisant les donnes
dun serveur. JDBC, lAPI dapplication de base de donnes Sun, est une
bibliothque de composants et de classes dveloppe par Sun pour
accder des sources de donnes distantes. Les composants sont
rassembls dans le paquet java.sql et reprsentent un cadre gnrique
daccs de bas niveau aux bases de donnes SQL.
LAPI JDBC dfinit des classes Java reprsentant les connexions de bases
de donnes, les instructions SQL, les ensembles de rsultats, les
mtadonnes de bases de donnes, etc. Elle permet au programmeur Java
de produire des instructions SQL et de traiter les rsultats. JDBC est lAPI
principale daccs aux bases de donnes en Java. LAPI JDBC est
implmente via un gestionnaire de pilotes qui peut grer plusieurs
pilotes se connectant diffrentes bases de donnes. Pour davantage
dinformations sur JDBC, visitez le site de Sun consacr lAPI daccs
aux bases de donnes JDBC, ladresse http://java.sun.com/products/jdbc/.
JBuilder utilise lAPI JDBC pour accder aux informations stockes dans
les bases de donnes. La plupart des composants et classes daccs aux
donnes de JBuilder utilisent lAPI JDBC. Ces classes doivent donc tre
correctement installes pour utiliser les composants de connexion aux
bases de donnes JBuilder. De plus, pour connecter votre application de
base de donnes un serveur distant, un pilote JDBC appropri est
ncessaire. Les pilotes peuvent tre regroups en deux catgories : les
pilotes implments en utilisant des mthodes natives qui font le lien
entre les bibliothques daccs existantes et les pilotes entirement Java.
Les pilotes qui ne sont pas entirement raliss en Java doivent sexcuter
sur le systme client (local). Les pilotes entirement Java peuvent tre
chargs sur le serveur ou localement. Un pilote entirement crit en Java
prsente lavantage de pouvoir tre tlcharg comme partie dune applet
et, de plus, il est indpendant de la plate-forme.
Certaines versions de JBuilder proposent des pilotes JDBC. Consultez le
site web Borland, ladresse http://www.borland.fr/jbuilder/, pour des
informations sur la disponibilit des pilotes JDBC dans les diffrentes
versions de JBuilder ou contactez le support technique de lditeur de
votre logiciel serveur pour savoir sil existe des pilotes JDBC. Certaines
versions de JBuilder proposent les options de pilote suivantes :
DataStoreDriver
DataStoreDriver est le pilote JDBC de la base de donnes JDataStore. Le
pilote gre laccs local et distant. Les deux types daccs demandent un
nom dutilisateur.
Remarque Le nom dutilisateur peut tre nimporte quelle chane. Si aucun
utilisateur na t ajout la table des utilisateurs du store, il est inutile
den fournir un. Cependant, pour un store transactionnel, une chane
non nulle doit tre fournie comme nom dutilisateur.
C o n n e x i o n u n e b a s e d e d o n n e s 4-13
C o n n e x i o n u n e b a s e d e d o n n e s e n u t i l i s a n t d e s p i l o t e s J D B C I n t e r C l i e n t
Pour savoir comment se connecter une base de donnes en utilisant le
pilote JDataStore, voir Chapitre 17, Tutoriel : Cration dune
application de base de donnes lmentaire.
InterClient
InterClient est un pilote JDBC qui vous permet de vous connecter
InterBase. InterClient peut tre install en excutant le programme
dinstallation InterClient. Une fois install, InterClient peut accder aux
donnes exemples InterBase laide du ConnectionDescriptor.
Pour plus dinformations sur la connexion une base de donnes en
utilisant InterClient, voir Connexion une base de donnes en
utilisant des pilotes JDBC InterClient, page 4-13.
Vous pouvez connecter les applications JBuilder des tables SQL locales
ou distantes, ou aux bases de donnes cres par dautres applications
Borland comme C++ Builder ou Delphi. Pour ce faire, dterminez la base
de donnes laquelle votre application doit se connecter et
connectez-vous cette base de donnes en utilisant sa connexion URL.
Connexion une base de donnes en utilisant des pilotes JDBC
InterClient
Cette section dcrit lajout dun composant Database, qui est un composant
spcifique JDBC grant une connexion JDBC. Elle dcrit galement la
dfinition des proprits de ce composant qui vous permettent daccder
aux donnes InterBase exemple.
Dans une application de base de donnes relle, vous placeriez
vraisemblablement le composant Database dans un module de donnes.
Car cela permet toutes les applications qui accdent la base de donnes
davoir une connexion commune. Pour plus dinformations sur les
modules de donnes, voir Chapitre 10, Utilisation des modules
de donnes pour simplifier laccs aux donnes.
Pour ajouter le composant Database votre application et vous connecter
aux fichiers InterBase exemple :
1 Veillez suivre les tapes de Configuration dInterBase et
InterClient, page 4-7, et de Ajout dun pilote JDBC JBuilder,
page 4-10, afin que votre systme soit en mesure daccder aux fichiers
InterBase exemple.
2 Fermez tous les projets et crez une nouvelle application, ou ajoutez la
connectivit un projet et une application existants.
Vous pouvez crer les fichiers dun nouveau projet et dune nouvelle
application en choisissant Fichier|Nouveau et en double-cliquant sur
licne Application. Acceptez toutes les valeurs par dfaut. JBuilder
4-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o n n e x i o n u n e b a s e d e d o n n e s e n u t i l i s a n t d e s p i l o t e s J D B C I n t e r C l i e n t
cre les fichiers ncessaires et les affiche dans le volet projet de
lAppBrowser. Le fichier Cadre1.java souvre dans le volet contenu.
Cadre1.java contiendra les composants de linterface utilisateur de
lapplication.
3 Cliquez sur longlet Conception, en bas du volet contenu, Cadre1.java
tant slectionn.
4 Slectionnez longlet DataExpress dans la palette de composants.
Cliquez sur le composant Database.
5 Cliquez un endroit quelconque du volet contenu, ou concepteur
dinterface utilisateur, pour ajouter le composant Database votre
application.
6 Dfinissez la proprit connection du composant Database pour spcifier
le pilote JDBC, lURL de connexion, le nom dutilisateur et le mot de
passe.
LURL de connexion JDBC est la faon quutilise JDBC pour spcifier
lemplacement dun fournisseur de donnes JDBC (ex., un serveur
SQL). Elle peut contenir absolument toutes les informations ncessaires
ltablissement de la connexion, y compris le nom dutilisateur et le
mot de passe.
Pour dfinir la proprit connection,
a Assurez-vous que lobjet Database est slectionn dans le volet
contenu.
Double-cliquez sur la proprit connection dans linspecteur, pour
ouvrir son diteur. Dans cet exemple, les donnes rsident sur un
serveur InterBase local. Si les vtres rsident sur un serveur distant,
tapez ladresse IP du serveur au lieu de localhost comme ici.
b Dfinissez les proprits suivantes :
Proprit Valeur
Pilote interbase.interclient.Driver
URL Naviguez jusquau fichier exemple InterBase,
employee.gdb, situ dans votre rpertoire InterBase/
examples. Lentre du champ URL doit ressembler :
UNIX :
jdbc:interbase://localhost//usr/interbase/examples/
employee.gdb
Windows :
jdbc:interbase://localhost/D:\InterBaseCorp\
InterBase\examples\database\employee.gdb
Nom dutilisateur SYSDBA
Mot de passe masterkey
C o n n e x i o n u n e b a s e d e d o n n e s 4-15
U t i l i s a t i o n d u c o m p o s a n t D a t a b a s e d a n s v o t r e a p p l i c a t i o n
La bote de dialogue se prsente ainsi :
Figure 4.3 Bote de dialogue dcrivant la connexion
c Cliquez sur le bouton Tester la connexion pour vrifier que les
proprits de connexion ont t correctement dfinies.
Le rsultat de la tentative de connexion est affich ct du bouton
Tester la connexion. Voir Messages derreur de connexion
courants, page 4-22, pour connatre les solutions certains
problmes de connexion courants.
d Une fois la connexion russie, cliquez sur OK pour sortir de la bote
de dialogue et crire les proprits de connexion dans le code source.
Astuce Lorsquune connexion une URL de base de donnes russit, vous
pouvez utiliser le pilote de base de donnes pour explorer les tables et les
mtadonnes des bases de donnes ou ses objets schma, comme vous
pouvez excuter des instructions SQL pour parcourir et modifier les
donnes des tables existantes.
Utilisation du composant Database dans votre application
Le composant Database figurant dsormais dans votre application, vous
pouvez ajouter un autre composant DataExpress qui extrait des donnes de
la source de donnes laquelle vous tes connect. JBuilder utilise des
requtes et des procdures stockes pour renvoyer un ensemble de
donnes. Les composants implments cet effet sont QueryDataSet et
ProcedureDataSet. Ces composants fonctionnent avec le composant Database
pour accder la base de donnes du serveur SQL. Pour connatre la faon
dutiliser ces composants, voir les sections suivantes :
Interrogation dune base de donnes, page 5-2
4-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
S o l l i c i t a t i o n d u n n o m d u t i l i s a t e u r e t d u n m o t d e p a s s e
Utilisation de requtes paramtres pour obtenir des donnes dune
base de donnes, page 5-12
Utilisation des procdures stockes, page 6-1
La plupart des tutoriels et des applications exemples utilisent une
connexion Database au JDataStore EMPLOYEE exemple, comme dcrit ici.
Pour la plupart des applications de bases de donnes, vous encapsulerez
probablement le Database et dautres composants DataExpress dans un
module de donnes plutt que de les ajouter directement dans le cadre dune
application. Pour davantage dinformations sur lutilisation du module de
donnes du paquet DataExpress, voir Chapitre 10, Utilisation des modules
de donnes pour simplifier laccs aux donnes.
Sollicitation dun nom dutilisateur et dun mot de passe
Lors du dveloppement dune application de base de donnes, il est
pratique dinclure un nom dutilisateur et un mot de passe dans le
ConnectionDescriptor afin quil ne soit pas ncessaire de prciser ces
informations chaque utilisation du concepteur ou chaque excution de
lapplication. Si vous dfinissez le ConnectionDescriptor via le concepteur,
le concepteur crit le code votre place. Avant de dployer votre
application, vous pouvez retirer du code le nom dutilisateur et le mot de
passe et demander lutilisateur de prciser ces informations lors de
lexcution, en particulier si vous distribuez le code source ou si les
utilisateurs ont des droits daccs diffrents. Vous disposez de plusieurs
options pour inviter un utilisateur prciser ses nom dutilisateur et mot
de passe lexcution.
Activez la case cocher Demander le mot de passe de lutilisateur dans
lditeur de la proprit connection de Database, ou crivez du code pour
affecter la valeur true au paramtre promptPassword de
ConnectionDescriptor.
A lexcution et lorsque des donnes dynamiques doivent safficher
dans le concepteur, une bote de dialogue de saisie du nom dutilisateur
et du mot de passe saffichera. Un nom dutilisateur et un mot de passe
corrects doivent tre saisis pour que les donnes saffichent.
Ajoutez une instance du composant dbSwing DBPasswordPrompter votre
application.
Cette option vous offre une meilleure emprise sur la gestion du nom
dutilisateur et du mot de passe. Vous pouvez spcifier les informations
requises (uniquement le nom dutilisateur, uniquement le mot de
passe, ou les deux), le nombre de tentatives accordes lutilisateur
pour saisir les informations, et dautres proprits. Le bouton OK
demeure dsactiv tant que les informations ncessaires ne sont pas
C o n n e x i o n u n e b a s e d e d o n n e s 4-17
M i s e e n p o o l d e s c o n n e x i o n s J D B C
fournies. La bote de dialogue saffiche lorsque vous appelez sa
mthode showDialog(). Cela vous permet de dterminer le moment
auquel elle saffiche. Veillez la prsenter tt dans votre application,
avant que tout composant visuel ne tente douvrir votre base de
donnes et dafficher des donnes. Le concepteur nappelle pas
showDialog(), si bien que vous devez spcifier les informations sur le
nom dutilisateur et le mot de passe dans le ConnectionDescriptor lors de
lactivation du concepteur.
Mise en pool des connexions JDBC
Pour les applications ncessitant de nombreuses connexions aux bases de
donnes, vous pouvez envisager la mise en pool des connexions. La mise
en pool des connexions gnre des gains de performance significatifs, en
particulier lorsquun trs grand nombre de connexions aux bases de
donnes sont ouvertes et fermes.
JDataStore fournit plusieurs composants pour grer les sources de
donnes JDBC 2.0 et la mise en pool des connexions. Lutilisation de ces
composants ncessite J2EE. Si votre version de JBuilder ne contient pas
J2EE.jar, vous devrez le tlcharger de chez Sun, et lajouter votre projet
en tant que bibliothque ncessaire. Consultez Ajout dune bibliothque
ncessaire un projet, page 10-6, pour avoir des instructions sur lajout
dune bibliothque ncessaire.
Lide de mise en pool des connexions est trs simple. Dans une
application qui ouvre et ferme de nombreuses connexions aux bases de
donnes, il est plus efficace de garder les objets Connection inutiliss dans
un pool pour les rutiliser plus tard. Cela conomise le temps douverture
dune nouvelle connexion physique chaque fois.
Voici les principaux composants DataSource et de mise en pool des
connexions fournis par JDataStore :
JDBCDataSource est une implmentation de linterface
javax.sql.DataSource. JDBCDataSource peut crer une connexion un
JDataStore, ou tout autre pilote JDBC, en fonction de ses proprits de
connexion JDBC, mais il ne met pas en pool les connexions. Comme
cest une implmentation de javax.sql.DataSource, il peut tre recens
par un service dannuaire JNDI. Pour plus dinformations sur les
services dannuaire JNDI, consultez la documentation JDK ou le site
http://www.javasoft.com.
JDBCConnectionPool est aussi une implmentation de javax.sql.DataSource
et peut, de ce fait, tre recens par un service dannuaire JNDI.
JDBCConnectionPool peut assurer la mise en pool des connexions avec
nimporte quel pilote JDBC. Il cre les connexions en fonction de ses
proprits de connexion JDBC. JDBCConnectionPool possde plusieurs
4-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
M i s e e n p o o l d e s c o n n e x i o n s J D B C
proprits consacres la gestion du pool de connexions, par exemple,
les proprits spcifiant les nombres maximal et minimal de
connexions.
Lorsque vous utilisez JdbcConnectionPool, vous devez dfinir la
proprit connectionFactory. Cela permet JdbcConnectionPool de crer
des objets javax.sql.PooledConnection. La dfinition de la proprit
connectionFactory doit faire rfrence une implmentation de
javax.sql.ConnectionPoolDataSource (comme JdbcConnectionFactory). La
proprit connectionFactory peut galement tre dfinie avec la
proprit dataSourceName. La proprit dataSourceName accepte une String,
qui sera recherche dans le service dannuaire JNDI pour fournir
limplmentation de javax.sql.ConnectionPoolDataSource.
Pour obtenir une connexion partir du pool, vous appellerez
habituellement JdbcConnectionPool.getConnection(). La connexion
renvoye par cette mthode ne supporte pas les transactions
distribues mais peut fonctionner avec nimporte quel pilote JDBC.
JDBCConnectionPool fournit galement le support des transactions
distribues (XA), mais cette fonctionnalit nest disponible que si
JDBCConnectionPool est utilis en conjonction avec le pilote JDBC
JDataStore, et nest utile que combin un gestionnaire de transactions
distribues tel que Borland Enterprise Server. Pour plus dinformations
sur le support XA de JDBCConnectionPool, voir Mise en pool des
connexions et support des transactions distribues dans le Guide du
dveloppeur JDataStore.
JdbcConnectionFactory est une implmentation de
javax.sql.ConnectionPoolDataSource. Il sert crer des objets
javax.sql.PooledConnection pour limplmentation dun pool de
connexions, comme JDBCConnectionPool.
JDBCConnectionPool et JDBCConnectionFactory fonctionnent habituellement
ensemble, mais chacun peut tre utilis sparment. Le dsappariement
de ces deux composants offre plus de souplesse. Par exemple,
JDBCConnectionFactory peut tre utilis avec un autre composant de mise
en pool des connexions qui utilise une stratgie diffrente de
JDBCConnectionPool. JDBCConnectionFactory peut tre utilis avec nimporte
quelle implmentation JDBC 2.0 du pool de connexions permettant
dimplmenter javax.sql.ConnectionPoolDataSource (comme
JDBCConnectionFactory) afin de fournir les javax.sql.PooledConnections.
Dautre part, la stratgie de mise en pool utilise par JDBCConnectionPool
peut servir avec une autre implmentation de factory de connexion.
JDBCConnectionPool peut tre utilis avec nimporte quel pilote JDBC sil
fournit un composant factory de connexion implmentant
javax.sql.ConnectionPoolDataSource.
C o n n e x i o n u n e b a s e d e d o n n e s 4-19
M i s e e n p o o l d e s c o n n e x i o n s J D B C
Maintenant que vous avez une vue gnrale des classes impliques dans
la mise en pool des connexions, il est temps de vous en dire plus sur leur
fonctionnement :
La mthode JdbcConnectionPool.getConnection() essaie dviter la charge
associe louverture dune nouvelle connexion en utilisant une
connexion dj prsente dans le pool. Lorsquune connexion est
recherche dans le pool, la recherche aboutit si le nom dutilisateur est
gal au nom dutilisateur qui a servi crer la connexion existant dans
le pool. Le mot de passe nest pas pris en compte dans cette recherche
de lutilisateur. Une nouvelle connexion est sollicite de la factory
uniquement si la recherche dans le pool choue.
La mise en pool des connexions est une API relativement simple mais
trs puissante. La majorit du travail difficile, comme le suivi des
connexions du pool et la dcision dutiliser une connexion existant dans
le pool ou den ouvrir une nouvelle, est pris en charge de manire
totalement interne.
Lorsquune application utilise la mise en pool des connexions, chaque
connexion doit toujours tre ferme explicitement lorsquelle ne sert
plus. Cela lui permet de retourner au pool pour une utilisation
ultrieure, ce qui amliore les performances.
La factory qui cr les connexions pour le pool doit utiliser les mmes
proprits pour toutes les connexions, lexception du nom
dutilisateur et du mot de passe. Il sen suit quun pool de connexions
accde une seule base de donnes et que toutes ses connexions
partagent les mmes dfinitions de proprits de connexion JDBC
(mais peuvent diffrer sur les noms dutilisateur/mots de passe).
Optimisation des performances de JConnectionPool
Le mcanisme de recherche dune connexion du pool utilisant le mme
nom dutilisateur est un balayage rapide qui value les rfrences aux
chanes nom dutilisateur. Il faut, si possible, passer la mme instance
String pour toutes les demandes de connexion. Une faon dy parvenir est
de toujours utiliser pour le pool de connexions un nom de constante
spcifie de la manire suivante :
public static final String POOL_USER = "CUSTOMER_POOL_USER";
Sorties historiques
JdbcConnectionPool et JdbcConnectionFactory possdent des proprits
PrintWriter. La majorit des sorties historiques prennent la forme
suivante :
[<hashcode de linstance de la classe>]:<nom de la classe>.<nom de la
mthode>(...)
4-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
M i s e e n p o o l d e s c o n n e x i o n s J D B C
Toutes les valeurs hexadcimales affiches entre les crochets droits ([ ])
dans les fichiers historiques sont les valeurs hashCode() pour un Object.
Exemple de mise en pool
Voici un exemple simple dutilisation de la mise en pool des connexions.
Ce fragment de code de module de donnes prsente les principales lignes
de code ncessaires une application utilisant la mise en pool des
connexions, indpendamment de ce que lapplication veut spcifiquement
faire de cette technologie. Pour voir un exemple de mise en pool des
connexions moins trivial, reportez-vous lexemple Web Bench dans
samples/JDataStore/WebBench. Pour plus dinformations sur les modules de
donnes, voir Utilisation des modules de donnes pour simplifier laccs
aux donnes, page 10-1.
import com.borland.dx.dataset.*;
import com.borland.dx.sql.dataset.*;
import com.borland.javax.sql.*;
import java.sql.*;
public class ModuleDeDonnees1 implements DataModule {
private static ModuleDeDonnees1 myDM;
private static final String POOL_USER = "POOL_USER";
private static JdbcConnectionFactory factory;
private static JdbcConnectionPool pool;
public ModuleDeDonnees1() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
// Instancie la factory de connexion
factory = new JdbcConnectionFactory();
// La ligne suivante dfinit lURL
// dun fichier JDataStore local. LURL
// spcifique dpendra de lemplacement
// de votre fichier JDataStore.
factory.setUrl("jdbc:borland:dslocal:<chemin daccs><nom du fichier>");
factory.setUser(POOL_USER);
factory.setPassword("");
// Instancie le pool de connexions
pool = new JdbcConnectionPool();
// Assigne la factory de connexion
// comme factory du pool
pool.setConnectionFactory(factory);
}
public Connection getConnection() {
Connection con = null;
try {
con = pool.getConnection();
C o n n e x i o n u n e b a s e d e d o n n e s 4-21
M i s e e n p o o l d e s c o n n e x i o n s J D B C
} catch (Exception ex) {
ex.printStackTrace();
}
return con;
}
public static ModuleDeDonnees1 getDataModule() {
if (myDM == null) {
myDM = new ModuleDeDonnees1();
}
return myDM;
}
public static JdbcConnectionPool getPool() {
return pool;
}
}
Vous crirez sans doute le code de la logique de lapplication dans un
fichier source spar. Le fragment de code suivant montre comment
solliciter des connexions auprs du pool et, ensuite, comment tre certain
que les connexions sont renvoyes au pool. Il montre galement comment
tre certain que le pool est arrt quand lapplication se termine.
public class doSomething {
static ModuleDeDonnees dm = null;
public doSomething() {
}
public static void main(String args[]) {
// Plusieurs des mthodes appeles ici peuvent dclencher des exceptions,
// une gestion des exceptions est donc ncessaire.
try {
// Instancie le module de donnes
dm = new ModuleDeDonnees();
java.sql.Connection con = null;
// Cette application obtient 100 connexions
// et les renvoie au pool.
for (int i=0; i<100; i++){
try {
// Obtient une connexion
con = dm.getPool().getConnection();
}
catch(Exception e) {
e.printStackTrace();
}
finally{
// Renvoie la connexion au pool
con.close();
}
}
}
catch (Exception x) {
x.printStackTrace();
}
finally{
try {
4-22 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n c a s d e p r o b l m e l o r s d e s c o n n e x i o n s d e J D a t a S t o r e e t d I n t e r B a s e
// Arrte le pool avant que
// lapplication ne se ferme.
dm.getPool().shutdown();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
En cas de problme lors des connexions de JDataStore et
dInterBase
La connexion un serveur SQL en utilisant JDBC peut afficher des
messages derreur gnrs par JDBC. Pour obtenir de laide sur la
rsolution des problmes de connexion JDataStore dans les tutoriels,
Consultez la section En cas de problme du Guide du dveloppeur
JDataStore.
Consultez les FAQ JDataStore de Borland ladresse
http://community.borland.com/article/0,1410,19685,00.html.
Consultez la section Messages derreur de connexion courants,
page 4-22, pour connatre les problmes de connexion InterBase via
InterClient.
Messages derreur de connexion courants
Voici certaines des erreurs de connexion courantes et les solutions
correspondantes :
Unable to locate the InterClient driver. InterClient na pas t ajout
comme bibliothque ncessaire au projet. Choisissez Projet|Proprits
du projet, puis ajoutez InterClient en tant que bibliothque requise.
Driver could not be loaded. InterClient na pas t ajout au chemin des
classes. Ajoutez le fichier interclient.jar au CLASSPATH du script de
dmarrage de JBuilder, ou au CLASSPATH de votre environnement
avant de lancer JBuilder.
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-1
C h a p i t r e
5
Chapitre5Extraction des donnes
dune source de donnes
Ce chapitre est consacr lutilisation de larchitecture DataExpress de
JBuilder pour extraire des donnes dune source de donnes et fournir des
donnes une application. Les composants dans les paquets DataExpress
encapsulent la fois la connexion entre lapplication et sa source de
donnes, et le comportement requis pour manipuler les donnes.
Pour crer une application de base de donnes, vous devez extraire les
donnes stockes dans la source de donnes et en crer une copie que
lapplication puisse manipuler localement. Lorsque les donnes sont
trouves par un processus dacquisition, elles sont mises en cache dans le
DataSet. Toutes les modifications apportes au DataSet cach sont suivies
de sorte que les implmentations du processus de rsolution connaissent
celles qui demandent une insertion, une mise jour ou une suppression
dans la source de donnes. Dans JBuilder, un sous-ensemble des donnes
de la source de donnes est extrait dans une sous-classe du StorageDataSet
de JBuilder. La sous-classe de StorageDataSet utilise dpend de la manire
dobtenir les informations.
Selon lapproche acquisition/rsolution, seules deux interactions sont
requises entre lapplication de base de donnes et la source de donnes :
la connexion initiale pour acqurir les donnes et la connexion finale pour
enregistrer (rsoudre) les modifications dans la source de donnes.
La connexion entre le client composant DataSet et la source de donnes
peut tre interrompue aprs lacquisition, et na besoin dtre rtablie que
pour la dure de la transaction de rsolution.
Les composants DataExpress fournissent galement le support de la
liaison de donnes directe pour les composants dbSwing. Il suffit de
dfinir une proprit dans linspecteur pour lier les donnes aux
composants visuels.
5-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Dans certains exemples de ce chapitre, un pilote JDataStore est utilis
pour accder aux donnes dun JDataStore. Dans dautres, un pilote JDBC
est utilis pour accder aux donnes de tables InterBase. Ces deux options
prsentent des avantages. Votre choix dpend des besoins de votre
application. Avec les deux options,
Vous pouvez directement connecter des composants visuels.
Vous disposez dun accs aux donnes offrant toutes les
fonctionnalits, dont matre-dtail, tri, filtrage et contraintes.
Vous pouvez suivre les modifications apportes aux donnes extraites
de sorte quelles puissent tre correctement rsolues dans la source de
donnes.
Interrogation dune base de donnes
Un composant QueryDataSet est un ensemble de donnes spcifique JDBC
qui gre un fournisseur de donnes JDBC, tel que dfini dans la proprit
query. Vous pouvez utiliser un composant QueryDataSet de JBuilder pour
extraire les donnes dune source de donnes et les placer dans un
composant StorageDataSet. Cette action est appele rsolution. Une fois les
donnes acquises, vous pouvez visualiser et manipuler les donnes
localement dans des composants orients donnes. Lorsque vous voulez
enregistrer les modifications dans votre base de donnes, vous devez
rsoudre les donnes. Larchitecture DataExpress est dcrite en dtail au
Chapitre 2, Les applications de bases de donnes JBuilder.
Les composants QueryDataSet permettent dutiliser des instructions SQL
pour accder aux donnes de la base (ou les acqurir). Vous pouvez
ajouter un composant QueryDataSet directement votre application, ou
lajouter un module de donnes afin de centraliser laccs aux donnes et
de contrler la logique mtier.
Pour interroger une table SQL, vous devez utiliser les composants
suivants que ce soit laide de code ou des outils de conception visuelle
de JBuilder :
Database
Le composant Database encapsule une connexion de base de donnes
via JDBC avec un serveur SQL et propose galement une gestion
simplifie des transactions.
QueryDataSet
Le composant QueryDataSet propose les caractristiques permettant
dexcuter une instruction de requte (avec ou sans paramtres) portant
sur les tables dune base de donnes SQL et de stocker lensemble de
rsultats de la requte.
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-3
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
QueryDescriptor
Lobjet QueryDescriptor stocke les proprits de la requte, y compris la
base de donnes interroger, la chane de requte excuter et
ventuellement les paramtres de la requte.
Le composant QueryDataSet dispose de caractristiques prdfinies
permettant de lire les donnes dune source de donnes JDBC. Toutefois,
les caractristiques prdfinies (sous la forme du rsolveur par dfaut)
vont au-del de la simple lecture des donnes. Elles gnrent galement
les requtes SQL INSERT, UPDATE et DELETE adquates afin
denregistrer les modifications dans la source de donnes aprs
lopration de lecture.
Les proprits suivantes de lobjet QueryDescriptor affectent lexcution de
la requte. Ces proprits peuvent tre initialises visuellement en
utilisant lditeur de la proprit query. Pour une description de lditeur
de la proprit query et de ses outils et proprits, voir Dfinition des
proprits dans la bote de dialogue query, page 5-4.
Un QueryDataSet peut tre utilis de trois manires diffrentes pour lire les
donnes :
Requtes sans paramtres. La requte est excute et les lignes sont lues
dans le QueryDataSet.
Proprit Effet
database Spcifie sur quel objet de connexion Database appliquer la requte.
query Une instruction SQL, gnralement une instruction SELECT.
paramtres Un ReadWriteRow optionnel utilis pour renseigner les paramtres,
sutilise avec les requtes paramtres.
executeOnOpen Oblige le QueryDataSet excuter la requte lors de son ouverture.
Cette option est utile pour afficher des donnes relles la
conception. Cette option peut galement tre active lexcution.
loadOption Une valeur entire optionnelle qui dfinit la mthode de chargement
des donnes dans lensemble de donnes. Les options possibles sont :
Charger toutes les lignes : charge toutes les donnes en une seule
fois.
Charger les lignes de faon asynchrone : provoque la lecture des
lignes de lensemble de donnes dans un thread distinct. Cela
permet daccder aux donnes de lensemble de donnes et de les
afficher alors que le composant QueryDataSet est en train de lire des
lignes dans la connexion de base de donnes.
Charger si ncessaire : charge les lignes quand elles sont
ncessaires.
Charger une ligne la fois : charge la demande et remplace la
ligne prcdente par la ligne en cours. Option utile pour les
applications traitant de gros volumes de donnes par lots.
5-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Les requtes paramtres : Des variables sont utilises dans
linstruction SQL et des valeurs sont spcifies pour sy substituer. Pour
davantage dinformations sur les requtes paramtres, voir
Utilisation de requtes paramtres pour obtenir des donnes dune
base de donnes, page 5-12.
Lecture dynamique de groupes de dtail. Les enregistrements dun
ensemble de donnes dtail sont lus la demande et stocks dans
lensemble de donnes dtail. Pour davantage dinformations, voir
Lecture des dtails, page 9-7.
Dfinition des proprits dans la bote de dialogue query
Lditeur de la proprit Query saffiche quand vous cliquez sur le bouton
points de suspension dans le champ valeur de la proprit query dun
composant QueryDataSet. Cet diteur peut sutiliser pour dfinir
visuellement les proprits de lobjet QueryDescriptor mais il a galement
dautres rles. Lditeur de la proprit Query est montr ci-aprs.
Chacune de ses options est dcrite par la suite.
Figure 5.1 Editeur de la proprit Query
Pour davantage dinformations, voir la rubrique
com.borland.dx.sql.dataset.QueryDescriptor dans la Rfrence de la
bibliothque de composants DataExpress.
La page Requte
La page Requte propose les options suivantes :
La liste droulante Base de donnes affiche le nom de tous les objets
Database instancis auxquels peut se lier ce composant QueryDataSet.
Cette proprit doit tre initialise pour que la requte sexcute. Pour
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-5
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
instancier un composant Database, voir Chapitre 4, Connexion une
base de donnes.
La slection dun objet Database rend utilisables les boutons
Constructeur SQL et Parcourir les tables.
Cliquez sur le bouton Constructeur SQL pour afficher le constructeur
SQL. Le constructeur SQL offre une reprsentation visuelle de la base
de donnes, et permet de crer une instruction SQL en slectionnant les
colonnes, en ajoutant une clause Where, Order By ou Group By, et en
affichant et testant linstruction SQL gnre. Lorsque vous cliquez sur
OK, linstruction SQL cre avec le constructeur SQL est place dans le
champ Instruction de la bote de dialogue Requte.
Cliquez sur le bouton Parcourir les tables pour afficher la bote de
dialogue Tables et colonnes disponibles. Cette bote de dialogue montre
la liste des tables de la Database spcifie et les colonnes de la table
slectionne. Les boutons Coller la table et Coller la colonne permettent
de crer rapidement linstruction de requte en collant dedans le nom
de la table slectionne (en cliquant sur le bouton Coller la table) ou de
la colonne slectionne (en cliquant sur le bouton Coller la colonne) la
position en cours du curseur dinsertion.
Ce bouton est estomp et inaccessible lorsque le champ Base de
donnes affiche la valeur <aucun>. Slectionnez un objet Database
dans cette zone pour rendre ce bouton disponible.
Instruction SQL est la reprsentation sous la forme dune chane Java
de linstruction SQL (gnralement une instruction SELECT). Entrez
linstruction de requte portant sur la base de donnes dsigne par la
liste droulante Base de donnes. Utilisez le bouton Parcourir les tables
pour coller rapidement les noms de table ou de colonne dans
linstruction de requte. Cest une proprit obligatoire qui doit
contenir une instruction SQL correcte. Si linstruction SQL ne renvoie
pas densemble rsultat, une exception est gnre.
Lexemple suivant dinstruction SQL simple est utilis frquemment
dans cette documentation. Cette instruction slectionne trois champs de
la table EMPLOYEE :
SELECT emp_no, last_name, salary FROM employee
Linstruction SQL suivante slectionne tous les champs de la table
EMPLOYEE.
SELECT * FROM employee
Loption Excuter la requte ds louverture dtermine si la requte est
excute automatiquement quand le composant QueryDataSet est ouvert.
Cette option est coche par dfaut, ce qui permet laffichage de donnes
relles dans le concepteur dinterface utilisateur quand le composant
QueryDataSet est li un composant orient donnes.
5-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Options de chargement sont des valeurs entires dfinissant la
mthode de chargement des donnes dans lensemble de donnes. Les
options possibles sont :
a Charger toutes les lignes : charge toutes les donnes en une seule
fois.
b Charger les lignes de faon asynchrone : provoque la lecture des
lignes de lensemble de donnes dans un thread distinct. Cela
permet daccder aux donnes de lensemble de donnes et de les
afficher alors que le composant QueryDataSet est en train de lire des
lignes dans la connexion de base de donnes.
c Charger si ncessaire : charge les lignes quand elles sont ncessaires.
d Charger une ligne la fois : charge la demande et remplace la ligne
prcdente par la ligne en cours. Option utile pour les applications
traitant de gros volumes de donnes par lots.
Lorsque Placer le texte SQL dans lensemble de ressources est coch,
au moment de sortir de lditeur de la proprit query, la bote de
dialogue Cration dun ResourceBundle saffiche. Slectionnez un type
de bundle de ressources. Quand vous choisissez le bouton OK, le texte
SQL est crit dans un fichier ressource afin que vous puissiez continuer
utiliser du code source pour du SQL persistant dans certaines
applications. Pour davantage dinformations sur cette caractristique,
voir Placer le texte SQL dans lensemble de ressources, page 5-7.
Si cette option nest pas coche, la chane SQL est crite dans lobjet
QueryDescriptor sous la forme dune chane place dans le code source.
Cliquez sur le bouton Tester la requte pour tester linstruction de
requte et les autres proprits de la bote de dialogue pour la base de
donnes spcifie. Le rsultat (Succs ou Echec) est affich dans la
zone grise en dessous du bouton Tester la requte. Si la zone en
dessous du bouton indique Succs, la requte peut sexcuter. Si elle
indique Echec, recherchez parmi les informations saisies dans la
requte sil y a des erreurs de frappe ou des oublis.
La page Paramtres
Dans la page Paramtres, vous pouvez slectionner un ReadWriteRow ou un
ensemble de donnes qui servira renseigner les paramtres utiliss dans
les requtes paramtres. Les valeurs de paramtre sont spcifies par
linstanciation dun objet ReadWriteRow. Dans la liste droulante,
slectionnez lobjet ReadWriteRow (ou la sous-classe ReadWriteRow) contenant
les valeurs appliquer aux paramtres de votre requte.
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-7
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Figure 5.2 Page Paramtres
Tout ReadWriteRow, tel un ParameterRow, un DataSet et un DataRow, peut tre
utilis comme paramtres de requte ou de procdure. Dans un
ParameterRow, les colonnes sont simplement configures avec les mthodes
addColumns et setColumns. Les DataSet et DataRow ne doivent tre utiliss que
sils contiennent dj les colonnes avec les donnes voulues. Pour un
exemple dutilisation, voir Utilisation de requtes paramtres pour
obtenir des donnes dune base de donnes, page 5-12.
Placer le texte SQL dans lensemble de ressources
Un java.util.ResourceBundle contient les objets spcifiques la locale.
Quand votre programme a besoin dune ressource spcifique la locale, il
peut la charger depuis le bundle de ressources appropri la locale de
lutilisateur en cours. De cette faon, vous pouvez crire du code
largement indpendant de la locale de lutilisateur : il suffit disoler la
majorit, sinon la totalit, des informations spcifiques aux locales dans
des bundles de ressources.
La bote de dialogue Cration dun ResourceBundle apparat la
fermeture de lditeur de la proprit query, si une instruction SQL a t
dfinie dans lditeur et que loption Placer le texte SQL dans lensemble
de ressources a t coche. La bote de dialogue Cration dun
ResourceBundle a laspect suivant :
Figure 5.3 Bote de dialogue du bundle de ressources
Pour utiliser un bundle de ressources dans votre application,
1 Slectionnez un type de ResourceBundle.
5-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Pour simplifier les choses, le JDK propose deux sous-classes
ResourceBundle pratiques utiliser : ListResourceBundle et
PropertyResourceBundle. La classe ResourceBundle mme est une classe
abstraite. Pour crer effectivement un bundle, il faut donc driver
ResourceBundle et spcifier limplmentation concrte des fonctions qui
lisent dans llment employ pour stocker vos ressources, par exemple
une chane. Vous pouvez stocker des ressources dans ce bundle en
cliquant avec le bouton droit de la souris sur une proprit et en
spcifiant la cl. JBuilder crit alors les chanes dans le fichier ressource
en utilisant le format appropri au type.
Si vous slectionnez ListResourceBundle, un fichier .java est gnr et
ajout au projet. Avec ListResourceBundle, les messages (ou les autres
ressources) sont stocks dans un tableau deux dimensions dans un
fichier source java. ListResourceBundle est galement une classe
abstraite. Pour crer un bundle qui puisse tre charg, il faut driver
de ListResourceBundle et implmenter la mthode getContents(), qui
gnralement se contente de pointer sur un tableau deux
dimensions de la forme cl-objet. Pour lexemple prcdent, il faut
crer la classe :
package myPackage;
public class myResource extends ListResourceBundle {
Object[][] contents = {
{"Hello_Message", "Comment allez-vous?"}
}
public Object[][] getContents() {
return contents;
}
}
Si vous slectionnez PropertyResourceBundle, un fichier de proprits
est cr. PropertyResourceBundle est une classe concrte, ce qui signifie
quil nest pas ncessaire de crer une autre classe pour lutiliser.
Pour les bundles de ressources qui sont des proprits, le stockage
des ressources seffectue dans des fichiers portant lextension
.properties. Quand vous implmentez un bundle de ressources
ayant cette forme, il suffit de fournir un fichier de proprits portant
le nom correct et de le stocker au mme endroit que les fichiers de
classe du paquet. Pour lexemple ci-dessus, il faut crer un fichier
myResource.properties et le placer dans CLASSPATH ou dans le
fichier zip/jar avec les autres classes du paquet myPackage. Cette
forme de bundle de ressources peut stocker des chanes mais elles
sont charges beaucoup plus lentement quavec une implmentation
base sur une classe comme ListResourceBundle. Cette solution est
nanmoins apprcie car elle ne ncessite pas de manipulation du
code source ni de recompilation. Le contenu du fichier des
proprits la forme suivante :
# comments
Hello_message=Comment allez-vous ?
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-9
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
2 Cliquez sur Annuler ou sur OK :
Le clic sur le bouton Annuler (ou la dslection de loption Placer le
texte SQL dans lensemble de ressources du dialogue query), crit dans
le fichier cadre un objet QueryDescriptor de la forme suivante. Le texte
SQL est crit dans une chane incorpore dans le code source :
queryDataSet1.setQuery(new
com.borland.dx.sql.dataset.QueryDescriptor(database1,
"select * from employee", null, true, LOAD.ALL));
Le clic sur le bouton OK cre un objet queryDescriptor de la forme
suivante :
queryDataSet1.setQuery(new
com.borland.dx.sql.dataset.QueryDescriptor(database1,
sqlRes.getString("employee"), null, true, LOAD.ALL));
A chaque fois que vous enregistrez le texte SQL dun QueryDescriptor,
JBuilder cre automatiquement un nouveau fichier appel SqlRes.java.
Il place le texte de la chane SQL dans SqlRes.java et cre une balise
sous forme dune chane unique qui est insre dans le texte. Par
exemple, pour linstruction de slection SELECT * FROM employee,
comme saisie prcdemment, au moment o OK est choisi le fichier
SqlRes.java est cr et a la forme suivante :
public class SqlRes extends java.util.ListResourceBundle {
static final Object[][] contents = {
{ "employee", "select * from employee" }};
static final java.util.ResourceBundle res = getBundle("untitled3.SqlRes");
public static final String getStringResource(String key) {
return res.getString(key);
}
public Object[][] getContents() {
return contents;
}
}
Si linstruction SQL est modifie, les modifications sont enregistres
dans SqlRes.java. Aucune modification du code lintrieur de jbInit()
ne sera ncessaire car la chane balise est invariante.
Pour davantage dinformations sur les bundles de ressources, choisissez
Aide|Rfrence Java dans laide de JBuilder pour voir la description
JavaDoc de java.util.ResourceBundle. Slectionnez ensuite le paquet
java.util et la classe ResourceBundle.
Interrogation dune base de donnes : Trucs & astuces
Cet ensemble de rubriques contient des conseils pour
Amliorer les performances des ensembles de donnes
Ouvrir et fermer les ensembles de donnes de faon plus efficace
Vous assurer quune requte est modifiable
5-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
Amlioration des performances des ensembles de donnes
Cette section propose quelque astuces pour amliorer les performances
des QueryDataSet et QueryProvider. Pour amliorer les performances lors de
lacquisition des donnes, liminez lanalyse de la requte effectue par
dfaut par le QueryProvider lors de la premire excution de la requte.
Pour des informations sur la manire de procder, voir Persistance des
mtadonnes dune requte, page 5-11.
Initialisez la proprit loadOption des composants Query/ProcedureDataSet
Load.ASYNCHRONOUS ou Load.AS_NEEDED. Vous pouvez galement
initialiser cette proprit Load.UNCACHED si vous ne lisez les donnes
quune seule fois et en ordre squentiel.
Pour de gros ensembles de rsultats, utilisez un JDataStore afin
damliorer les performances. Avec cette option, les donnes sont
enregistres sur disque et non en mmoire.
Instructions SQL caches. Par dfaut, DataExpress place dans un cache
les instructions prpares des requtes et procdures stockes si
java.sql.Connection.getMetaData().getMaxStatements() renvoie une valeur
suprieure 10. Vous pouvez imposer lutilisation du cache des
instructions dans JBuilder en appelant
Database.setUseStatementCaching(true).
Les instructions prpares places dans le cache ne sont pas fermes
avant ceci :
La modification de certaines proprits dpendant du fournisseur,
comme la proprit query.
Le recyclage dun composant DataSet (linstruction est ferme par la
mthode finalize()).
Lappel de QueryDataSet.closeStatement(),
ProcedureDataSet.closeStatement(), QueryProvider.closeStatement() ou
ProcedureProvider.closeStatement().
Pour amliorer les performances lors des insertions/suppressions/
modifications des donnes :
Pour les modifications et les suppressions :
a Initialisez la proprit Resolver avec un QueryResolver.
b Initialisez la proprit UpdateMode de ce QueryResolver
UpdateMode.KEY_COLUMNS.
Ces actions limitent la mthode optimiste utilise pour les accs
simultans mais rduit le nombre de paramtres dfinis pour une
opration de modification/suppression.
Dfinissez la proprit useTransactions de votre Database par false. Par
dfaut, cette proprit est true lorsque la base de donnes supporte les
transactions. Quand elle est true, chaque instruction dinsertion, de
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-11
I n t e r r o g a t i o n d u n e b a s e d e d o n n e s
suppression ou de mise jour est traite comme une transaction
distincte, valide automatiquement. Quand vous dfinissez
useTransactions par false, les instructions sont toutes traites en une
seule transaction.
Remarque Dans ce cas, vous devez appeler la mthode commit() de Database ou de
Connection pour terminer la transaction (ou appeler rollback() pour
abandonner toutes les modifications).
Dsactivez lindicateur resetPendingStatus dans la mthode
Database.saveChanges() afin dobtenir davantage de gains en
performances. Si cet indicateur est dsactiv, DataExpress nefface pas
ltat RowStatus pour toutes les lignes insres/ supprimes/modifies.
Cela nest souhaitable que si vous nappelez pas saveChanges() pour de
nouvelles modifications de lensemble de donnes sans appeler
dabord refresh.
Persistance des mtadonnes dune requte
Par dfaut, une requte est analyse lors de sa premire excution. Cette
analyse implique lanalyse de la chane de la requte et lappel de
plusieurs mthodes du pilote JDBC. Cette analyse peut savrer trs
coteuse. Il est possible dviter cette perte de temps lexcution en
effectuant lanalyse lors de la conception dune fiche ou dun modle de
donnes.
Pour ce faire,
1 Slectionnez le QueryDataSet dans le concepteur, cliquez dessus avec le
bouton droit de la souris et choisissez Activer le concepteur.
2 Cliquez sur le bouton Continuer toutes les mtadonnes dans le
concepteur de colonne.
La requte est alors analyse et plusieurs affectations de proprits sont
ajoutes au code. Pour davantage dexplications sur le bouton Continuer
toutes les mtadonnes, voir Utilisation du concepteur de colonne pour
rendre persistantes des mtadonnes, page 7-4. Pour initialiser ces
proprits sans utiliser le concepteur,
1 Initialisez NONE la proprit metaUpdate du StorageDataSet.
2 Attribuez la proprit tableName du StorageDataSet le nom de la table
pour les requtes monotables.
3 Initialisez la proprit rowID de Column des colonnes afin quelles
identifient les lignes de manire unique et cohrente.
4 Modifiez la chane de la requte afin dinclure les colonnes ncessaires
lidentification des lignes (voir le point prcdent) si elles ny
apparaissent pas dj. De telles colonnes doivent tre marques comme
invisibles laide de la proprit visible ou de la proprit hidden de
Column.
5-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
5 Initialisez les proprits de colonne precision, scale et searchable.
Ces proprits ne sont pas ncessaires si la proprit metaDataUpdate est
dfinie par autre chose que NONE.
6 Dfinissez la proprit tableName de Column pour une requte multitable.
7 Dfinissez la proprit serverColumnName de Column par le nom de la
colonne de la table physique correspondante si la requte utilise des
alias pour les colonnes.
Ouverture et fermeture des ensembles de donnes
Les composants Database et DataSet sont ouverts implicitement quand des
composants qui leur sont associs souvrent. Quand vous nutilisez pas de
composant visuel, vous devez ouvrir lensemble de donnes
explicitement. Louverture se propage vers le haut et la fermeture
vers le bas, ainsi louverture de lensemble de donnes ouvre
implicitement la base de donnes. Un composant Database nest jamais
ferm explicitement.
Comment sassurer quune requte est modifiable
Quand JBuilder excute une requte, il tente de vrifier que la requte est
modifiable et quelle peut tre rsolue dans la base de donnes. Si JBuilder
dtermine que la requte nest pas modifiable, il tente de changer la
requte pour la rendre modifiable, gnralement en ajoutant des colonnes
la clause SELECT.
Si une requte savre ne pas tre modifiable et si JBuilder ne peut la
rendre modifiable en changeant la requte, lensemble de rsultats sera en
lecture seule.
Pour que tout ensemble de donnes soit modifiable, affectez la valeur
NONE la proprit updateMetaData et spcifiez le nom de la table et les
colonnes identifiant les lignes de manire unique (un groupe de colonnes
qui peuvent identifier de manire unique une ligne, comme un index
primaire ou unique). Pour des informations sur la manire de procder,
voir Persistance des mtadonnes dune requte, page 5-11.
Vous pouvez interroger une vue SQL, mais comme JBuilder nindique pas
si les donnes proviennent dune vue SQL ou dune table SQL, il y a donc
un risque que les donnes ne soient pas modifiables. Vous pouvez rgler
ce problme en crivant un rsolveur personnalis.
Utilisation de requtes paramtres pour obtenir des donnes
dune base de donnes
Une instruction SQL paramtre contient des variables, appeles
paramtres, dont la valeur peut changer lexcution. Une requte
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-13
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
paramtre utilise ces variables la place de valeurs de donnes littrales,
comme celles utilises dans une clause WHERE pour la comparaison, qui
apparaissent dans une instruction SQL. Ces variables sont appeles
paramtres. Gnralement, les paramtres remplacent les valeurs de
donnes spcifies dans linstruction. Il faut spcifier la valeur de ce
paramtre avant dexcuter la requte. Lexcution de la requte en
spcifiant diffrents jeux de valeurs permet dobtenir diffrents ensembles
de donnes pour une mme requte.
Pour comprendre les requtes paramtres, il est indispensable de
comprendre comment les donnes sont fournies un DataSet ; lisez donc,
si ce nest dj fait, le Chapitre 2, Les applications de bases de donnes
JBuilder, et Interrogation dune base de donnes, page 5-2. Ce qui suit
traite spcifiquement des requtes paramtres.
En plus des instructions fournies par la section Paramtrage dune
requte, page 5-13, les aspects suivants des requtes paramtres seront
abords :
Utilisation de paramtres
R-excution dune requte avec des paramtres modifis
Requtes paramtres dans les relations matre-dtail
Paramtrage dune requte
Lexemple suivant dcrit la manire de fournir des donnes une
application en utilisant un composant QueryDataSet. Cet exemple ajoute un
ParameterRow avec des valeurs minimum et maximum pouvant tre
modifies lors de lexcution. Quand les valeurs du ParameterRow sont
modifies, la table est automatiquement rafrachie pour nafficher que les
enregistrements respectant le critre spcifi laide des paramtres.
Remarque Avant de poursuivre par les tapes ci-dessous, il est ncessaire que vous
vous soyez familiaris avec lutilisation des outils de conception. Pour ce
faire, nous vous recommandons dexcuter le tutoriel du Chapitre 16,
Tutoriel : Importation et exportation des donnes dun fichier texte.
La version finale de lapplication cre par les tapes suivantes est
disponible dans le projet exemple ParameterizedQuery.jpr, situ dans le
rpertoire /samples/DataExpress/ParameterizedQuery de linstallation de
JBuilder.
Cration de lapplication
Pour crer lapplication,
1 Choisissez Fichier|Tout fermer.
2 Choisissez Fichier|Nouveau et double-cliquez sur licne Application.
5-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
3 Acceptez toutes les valeurs par dfaut pour crer une nouvelle
application.
4 Slectionnez longlet Conception pour activer le concepteur dinterface
utilisateur.
5 Cliquez sur le composant Database dans la page DataExpress de la
palette de composants, cliquez ensuite nimporte o dans le concepteur
dinterface utilisateur pour ajouter ce composant votre application.
Ouvrez lditeur de la proprit Connection du composant Database en
cliquant dans linspecteur sur les points de suspension (...) situs ct
de la valeur de la proprit connection.
6 Dfinissez les proprits de la connexion la table exemple JDataStore
comme suit :
La bote de dialogue Connection contient un bouton Tester la connexion.
Cliquez sur ce bouton pour vrifier que les proprits de connexion sont
correctement dfinies. Les rsultats de la tentative de connexion
saffichent ct du bouton. Quand la connexion russit, cliquez sur OK.
Si vous souhaitez voir le code qui a t gnr, cliquez sur longlet
Source et cherchez le code de ConnectionDescriptor. Cliquez sur longlet
Conception pour continuer.
Pour plus dinformations sur la connexion aux bases de donnes, voir
Chapitre 4, Connexion une base de donnes.
Ajout dun composant ParameterRow
Ajoutez ensuite un ParameterRow ayant deux colonnes : low_no et high_no.
Lorsque vous avez li le ParameterRow un QueryDataSet, vous pouvez
utiliser des composants JdbTextField pour changer les valeurs du
ParameterRow afin dactualiser la requte avec ces nouvelles valeurs.
1 Ajoutez un composant ParameterRow de la page DataExpress
lapplication.
2 Cliquez sur licne dextension, gauche de parameterRow1 dans
larborescence des composants, pour afficher les colonnes contenues
dans ParameterRow.
Nom de la proprit Valeur
Pilote com.borland.datastore.jdbc.DataStoreD
river
URL Naviguez jusqu <jbuilder>/samples/
JDataStore/datastores/employee.jds dans
le champ URL local.
Nom dutilisateur Entrez votre nom
Mot de passe non obligatoire
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-15
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
3 Slectionnez <nouvelle colonne> et dfinissez dans linspecteur les
proprits suivantes pour la nouvelle colonne :
Pour voir le code gnr par le concepteur pour cette tape, cliquez sur
longlet Source et cherchez la mthode jbInit(). Cliquez sur longlet
Conception pour continuer.
1 Slectionnez nouveau <nouvelle colonne> pour ajouter la deuxime
colonne du ParameterRow et dfinissez les proprits suivantes de cette
colonne :
Ajout dun QueryDataSet
1 Ajoutez un composant ParameterRow de la page DataExpress
lapplication.
2 Cliquez sur le bouton points de suspension (...) de la proprit query
pour ouvrir lditeur de la proprit Query.
3 Dfinissez la proprit query du QueryDataSet comme suit :
4 Cliquez sur longlet Paramtres de lditeur de la proprit Query.
5 Slectionnez parameterRow1 dans la liste droulante afin de lier
lensemble de donnes au ParameterRow.
6 Slectionnez longlet Requte et cliquez sur le bouton Tester la requte
pour vrifier que la requte est excutable. Quand la zone ct du
bouton indique Succs, cliquez sur OK pour fermer le dialogue.
Nom de la proprit Valeur
columnName low_no
dataType INT
default 15
Nom de la proprit Valeur
columnName high_no
dataType INT
default 50
Nom de la proprit Valeur
Base de donnes database1
Instruction SQL select emp_no, first_name, last_name
from employee where emp_no >= :low_no
and emp_no <= :high_no
5-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
Le code suivant pour le queryDescriptor est ajout la mthode
jbInit() :
queryDataSet1.setQuery(new
com.borland.dx.sql.dataset.QueryDescriptor(database1,
"select emp_no, first_name, last_name from employee where emp_no
<= :low_no and emp_no >= :high_no",
parameterRow1, true, Load.ALL));
7 Ajoutez un composant DBDisposeMonitor de la page dbSwing
supplmentaires. Le DBDisposeMonitor fermera le JDataStore lorsque la
fentre sera ferme.
8 Dfinissez la proprit dataAwareComponentContainer du DBDisposeMonitor
par this.
Ajout des composants dinterface utilisateur
Ce qui suit suppose que vous ayez effectu le tutoriel dintroduction aux
bases de donnes et que vous soyez familiaris avec lajout de composants
dinterface utilisateur dans le concepteur.
Pour ajouter les composants qui vous permettront de visualiser et de
manipuler les donnes de votre application,
1 Cliquez sur un composant TableScrollPane dans longlet dbSwing de la
palette. Dposez-le au centre du panneau dans le concepteur
dinterface utilisateur.
Vrifiez que sa proprit constraints est dfinie par CENTER.
2 Dposez un composant JdbTable de longlet dbSwing au centre du
composant tableScrollPane1 et dfinissez sa proprit dataSet par
queryDataSet1.
Vous remarquerez que la table dans le concepteur affiche des donnes
dynamiques.
3 Choisissez Excuter|Excuter le projet pour excuter lapplication et
parcourir lensemble de donnes.
4 Fermez lapplication excute.
Pour ajouter les composants permettant de paramtrer la requte
lexcution,
1 Slectionnez le composant JPanel dans longlet Conteneurs Swing de la
palette et placez-le dans larborescence des composants, directement
sur licne gauche de contentPane(BorderLayout).
Cela garantit que le JPanel (jPanel1) sera bien ajout linterface
utilisateur principale et non au tableScrollPane1 qui occupe
actuellement tout le panneau de linterface utilisateur.
2 Assurez-vous que sa proprit constraints est dfinie par NORTH.
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-17
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
Si tableScrollPane1 se rapetisse subitement, vrifiez que sa proprit
constraints vaut toujours CENTER.
3 Slectionnez jPanel1 et dfinissez sa proprit preferredSize par 200,100.
Cela lui permettra dtre suffisamment grand pour contenir le reste des
composants de linterface utilisateur.
4 Placez un composant JdbTextField de longlet dbSwing dans jPanel1.
Ce composant stocke la valeur minimum.
5 Remarquez que jdbTextField1 se trouve au milieu du panneau, en haut.
Cest parce que la disposition par dfaut des composants JPanel est
FlowLayout. Si vous essayez de placez le composant ailleurs, il ny restera
pas et retournera sa position initiale.
Pour pouvoir contrler le positionnement des composants dinterface
utilisateur dans ce panneau, changez la proprit layout de jPanel1 en
null. Ensuite, faites glisser jdbTextField1 vers la gauche du panneau.
6 Donnez la proprit columns de jdbTextField1 la valeur 10 pour quil ait
une largeur fixe. Donnez sa proprit text la valeur 10 pour
correspondre la valeur minimum par dfaut prcdemment saisie.
7 Ajoutez un JLabel de la page Swing jPanel1. Cela permet didentifier
jdbTextField1 comme champ minimum.
8 Cliquez sur jLabel1 dans le concepteur dinterface utilisateur et faites-le
glisser juste au-dessus de jdbTextField1.
9 Dfinissez la proprit text de jLabel1 par Valeur minimum. Tirez sur la
poigne de redimensionnement noire au milieu du ct gauche et
augmentez la largeur du libell jusqu ce que lon voie tout le texte.
10 Ajoutez un autre JdbTextField et un autre JLabel au jPanel1 pour la
valeur maximum. Faites glisser ces deux composants vers la droite du
panneau.
11 Dfinissez la proprit columns de jdbTextField2 par 10, et sa proprit
text par 50.
12 Dfinissez la proprit text de jLabel2 par Valeur maximum et augmentez
sa largeur pour voir tout le texte.
13 Alignez les quatre composants.
Maintenez enfonce la touche CTRL et cliquez sur les deux composants
jLabel1 et jdbTextField1. Cliquez avec le bouton droit et choisissez
Aligner gauche pour aligner les cts gauches. (Quand vous utilisez
la disposition null pendant le prototypage dune interface utilisateur,
les options dalignement sont accessibles dans le menu contextuel.)
Alignez gauche jLabel2 et jdbTextField2. Alignez en haut les deux
champs de texte et les deux libells.
5-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
14 Ajoutez un JButton de la page Swing jPanel1. Placez ce bouton au
milieu, mi-chemin des deux champs de texte. Dfinissez sa proprit
text par Mise jour.
Cliquer sur ce bouton permet de mettre jour les rsultats de la requte
paramtre partir des valeurs entres dans les champs de saisie des
valeurs minimum et maximum.
15 Slectionnez longlet Evnements de linspecteur, slectionnez le
champ actionPerformed et double-cliquez sur la valeur du champ pour
crer un vnement actionPerformed() dans le code source. Le volet
Source saffiche et le curseur apparat entre les accolades ouvrante et
fermante du nouvel vnement actionPerformed().
Ajoutez le code suivant pour obtenir ceci :
void jButton1_actionPerformed(ActionEvent e) {
try {
// modifie les valeurs dans la ligne de paramtres
// et rafrachit laffichage
parameterRow1.setInt("low_no",
Integer.parseInt(jdbTextField1.getText()));
parameterRow1.setInt("high_no",
Integer.parseInt(jdbTextField2.getText()));
queryDataSet1.refresh();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
16 Enregistrez votre travail et excutez lapplication. Elle doit ressembler
ceci :
Pour tester lexemple, entrez une nouvelle valeur dans le champ de
saisie de la valeur minimum, puis cliquez sur le bouton Mise jour.
La table naffiche que les valeurs suprieures la nouvelle valeur
minimum. Entrez une nouvelle valeur dans le champ de saisie de la
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-19
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
valeur maximum, puis appuyez sur le bouton Mise jour. La table
naffiche que les valeurs infrieures la nouvelle valeur maximum.
Pour enregistrer vos modifications dans la source des donnes, vous
devrez ajouter un QueryResolver. Voir Enregistrement des
modifications dun QueryDataSet, page 8-3, pour savoir comment
ajouter un bouton avec du code de rsolution, ou ajouter un composant
JdbNavToolbar au volet Contenu et utiliser son bouton Enregistrer les
modifications comme rsolveur de requte par dfaut.
Les requtes paramtres : Trucs & astuces
Cet ensemble de rubriques contient des conseils pour
Utiliser les paramtres nomms et les marqueurs de paramtres
R-excuter la requte avec de nouveaux paramtres
Utiliser une requte paramtre dans une relation matre-dtail
Utilisation de paramtres
Pour affecter des valeurs aux paramtres dune requte paramtre, il faut
dabord crer un ParameterRow et ajouter des colonnes nommes qui
contiendront les valeurs transmettre la requte.
Tout ReadWriteRow, tel un ParameterRow, un DataSet et un DataRow, peut tre
utilis comme paramtres de requte ou de procdure. Dans un
ParameterRow, les colonnes sont simplement configures avec les mthodes
addColumns et setColumns. Les DataSet et DataRow ne doivent tre utiliss que
sils contiennent dj les colonnes avec les donnes voulues.
Les classes Row sont utilises de manire extensive dans lAPI DataExpress.
Les classes ReadRow et ReadWriteRow sont utilises comme interfaces
indiquant lutilisation voulue. En utilisant une hirarchie de classes,
limplmentation est partage et il y a un lger avantage en performances
par rapport lutilisation dinterfaces.
Le texte suivant illustre la hirarchie des classes associe aux mthodes
DataSet.
java.lang.Object
+----com.borland.dx.dataset.ReadRow
+----com.borland.dx.dataset.ReadWriteRow
+----com.borland.dx.dataset.DataSet
+----com.borland.dx.dataset.StorageDataSet
+----com.borland.dx.sql.dataset.QueryDataSet
Les mthodes StorageDataSet traitent la structure des ensembles de
donnes
Les mthodes DataSet grent la navigation
5-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
Les mthodes ReadWriteRow permettent de modifier les valeurs des
colonnes (cest--dire les champs) de la ligne en cours
Les mthodes ReadWriteRow donnent accs aux valeurs des colonnes
(cest--dire aux champs) de la ligne en cours
TableDataSet et QueryDataSet hritent de toutes ces mthodes.
Les classes Row donnent accs aux valeurs des colonnes par indice ou par
nom de colonne. La spcification des colonnes par leur nom permet
dcrire un code plus fiable et plus lisible. Laccs aux colonnes par nom
nest pas aussi rapide que laccs par indice, mais reste raisonnable tant
que le nombre des colonnes de lensemble de donnes ne dpasse pas 20
grce lutilisation dalgorithmes propritaires de mise en
correspondance rapide du nom avec lindice. Il est prfrable dutiliser les
mmes chanes pour tous les accs une mme colonne. Cela conomise
de la mmoire et simplifie la saisie quand il y a de nombreuses rfrences
la mme colonne.
Le ParameterRow est transmis dans le QueryDescriptor. Lditeur de proprit
query permet de slectionner une ligne de paramtres. Ldition dun
composant ParameterRow, que ce soit lajout de colonnes ou la modification
de ses proprits, peut seffectuer dans linspecteur ou dans le code.
Vous pouvez, par exemple, crer un composant ParameterRow contenant
deux champs, low_no et high_no. Il est possible de faire rfrence
low_no et high_no dans la requte paramtre et de les comparer la
valeur de nimporte quel champ de la table. Voir lexemple ci-dessous
pour une illustration de lutilisation de ces valeurs.
Les requtes paramtres JBuilder peuvent sexcuter en utilisant des
paramtres nomms, des marqueurs de paramtres ou une relation
matre-dtail. Les sections suivantes dcrivent brivement ces trois cas.
En utilisant des paramtres nomms :
Quand les marqueurs de paramtres de la requte sont spcifies par le
caractre deux points (:) suivi dun nom alphanumrique, la mise en
correspondance des noms de paramtres a lieu. La colonne du
ParameterRow portant le mme nom que le marqueur de paramtre est
utilise pour dfinir la valeur du paramtre. Dans linstruction SQL
suivante, les valeurs slectionner sont transmises en utilisant des
paramtres nomms :
SELECT * FROM employee where emp_no > :low_no and emp_no < :high_no
Dans cette instruction SQL, :low_no et :high_no sont le substitut de la
valeur effective fournie linstruction lors de lexcution de la requte
par lapplication. La valeur de ce champ peut provenir dun composant
visuel ou avoir t gnre par du code. En mode conception, la valeur
par dfaut de la colonne sera utilise. Quand un nom est affect un
paramtre, il peut tre transmis la requte sans tenir compte de
E x t r a c t i o n d e s d o n n e s d u n e s o u r c e d e d o n n e s 5-21
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
lordre. JBuilder associe les paramtres lensemble de donnes dans le
bon ordre au moment de lexcution.
Dans Paramtrage dune requte, page 5-13, deux colonnes sont
ajoutes au ParameterRow afin de contenir les valeurs minimum et
maximum. Le descripteur de la requte spcifie que la requte ne doit
renvoyer que les valeurs suprieures la valeur minimum et
infrieures la valeur maximum.
Avec les marqueurs de paramtres JDBC ? :
Quand le marqueur de paramtre JDBC point dinterrogation (?) est
utilis, la dfinition de la valeur des paramtres doit seffectuer
strictement de gauche droite.
Dans linstruction SQL suivante, les valeurs slectionner sont
transmises avec les marqueurs de paramtres JDBC ? :
SELECT * FROM employee WHERE emp_no > ?
Dans cette instruction SQL, la valeur ? est le substitut de la valeur
effectivement fournie par lapplication linstruction lors de son
excution. La valeur de ce champ peut provenir dun composant visuel
ou avoir t gnre par du code. Lorsquun marqueur de paramtre
JDBC ? est utilis, les valeurs doivent tre transmises la requte en
allant de la gauche vers la droite. A lexcution, JBuilder associe les
paramtres la source des valeurs (un ReadWriteRow) dans cet ordre. La
liaison des paramtres se traduit par lallocation de ressources pour
linstruction et ses paramtres, la fois en local et sur le serveur, afin
damliorer les performances lors de lexcution dune requte.
Avec une relation matre-dtail :
Par dfinition, les ensembles de donnes matre et dtail ont au moins
un champ en commun. Ce champ est utilis comme une requte
paramtre. Pour davantage dinformations sur la manire de spcifier
ainsi des paramtres, voir Requtes paramtres dans les relations
matre-dtail, page 5-22.
R-excution dune requte avec des paramtres modifis
Pour r-excuter la requte avec de nouveaux paramtres, dfinissez de
nouvelles valeurs dans le ParameterRow puis appelez QueryDataSet.refresh()
pour forcer lexcution de la requte en utilisant les nouvelles valeurs des
paramtres. Par exemple, pour employer un composant de linterface
utilisateur dans le but de dfinir la valeur dun paramtre, utilisez une
instruction SQL de la forme suivante :
SELECT * FROM phonelist WHERE lastname LIKE :searchname
5-22 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e r e q u t e s p a r a m t r e s p o u r o b t e n i r d e s d o n n e s d u n e b a s e d e d o n n e s
Dans cet exemple, la valeur du paramtre :searchname peut tre dfinie
par un composant de linterface utilisateur. Pour ce faire, votre code doit :
1 Obtenir la valeur du composant chaque fois quelle change.
2 La placer dans une colonne dun objet ParameterRow.
3 Fournir cet objet au QueryDataSet.
4 Appeler refresh() pour le QueryDataSet.
Pour savoir comment faire cela avec les fichiers exemple de JBuilder, voir
Paramtrage dune requte, page 5-13.
Si les valeurs que vous voulez affecter au paramtre query se trouvent
dans une colonne dun ensemble de donnes, vous pouvez utiliser cet
ensemble de donnes en tant que votre ReadWriteRow dans le
QueryDescriptor, naviguer dans lensemble de donnes et r-excuter la
requte pour chaque valeur.
Requtes paramtres dans les relations matre-dtail
Quand, dans une relation matre-dtail, DelayedDetailFetch a la valeur true
(pour ne lire les donnes que lorsque cest ncessaire), vous pouvez
spcifier une instruction SQL de la forme :
SELECT * FROM employee WHERE country = :job_country
Dans cet exemple, :job_country correspond au champ que cet ensemble de
donnes dtail utilise pour se relier lensemble de donnes matre. Il est
possible de spcifier autant de paramtres et de champs de liaison matre
que ncessaire. Dans une relation matre-dtail, le nom du paramtre doit
toujours correspondre au nom de la colonne. Pour davantage
dinformations sur les relations matre-dtail et le paramtre
DelayedDetailFetch, voir Etablissement dune relation matre-dtail,
page 9-1.
Dans un descripteur de relation matre-dtail, la liaison seffectue
implicitement. Liaison implicite signifie que les valeurs des donnes ne
sont pas fournies explicitement par le programmeur, elles sont obtenues
de la ligne en cours de lensemble de donnes matre et implicitement lies
quand la requte dtail est excute. La liaison des paramtres se traduit
par lallocation de ressources pour linstruction et ses paramtres, la fois
en local et sur le serveur, afin damliorer les performances lors de
lexcution dune requte.
Si les valeurs que vous voulez affecter au paramtre query se trouvent
dans une colonne dun ensemble de donnes (lensemble de donnes
matre), vous pouvez utiliser cet ensemble de donnes en tant que votre
ReadWriteRow dans le QueryDescriptor, naviguer dans lensemble de donnes
et r-excuter la requte pour chaque valeur affiche dans lensemble de
donnes dtail.
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s 6-1
C h a p i t r e
6
Chapitre6Utilisation
des procdures stockes
Dans une procdure stocke, une ou plusieurs instructions SQL sont
encapsules en un seul endroit du serveur et peuvent sexcuter en
groupe. Dans la version Client/Serveur de JBuilder, les composants
ProcedureDataSet permettent daccder ou dacqurir les donnes de la base
de donnes laide de procdures stockes existantes, en les appelant avec
des squences dchappement de procdure JDBC ou en utilisant une
syntaxe spcifique au serveur pour les appels de procdure. Pour excuter
une procdure stocke sur une table SQL dont le rsultat est un ensemble
de lignes, il faut les composants suivants. Il est possible de spcifier ces
informations par code ou en utilisant les outils de conception JBuilder.
Le composant Database encapsule une connexion de base de donnes
via JDBC avec un serveur SQL et propose galement une gestion
simplifie des transactions.
Le composant ProcedureDataSet permet dexcuter la procdure stocke
(avec ou sans paramtres) sur la base de donnes SQL et stocke le
rsultat de lexcution dans la procdure stocke.
Lobjet ProcedureDescriptor stocke les proprits de la procdure
stocke, y compris la base de donnes interroger, les squences
dchappement ou les appels des procdures stockes et tous les
paramtres optionnels de la procdure stocke.
Quand il fournit les donnes de sources JDBC, le composant
ProcedureDataSet dispose de fonctions prdfinies pour lire les donnes
dans une procdure stocke qui renvoie un curseur sur un ensemble
de rsultats.
6-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s
Les proprits suivantes de lobjet ProcedureDescriptor affectent lexcution
des procdures stockes :
Un ProcedureDataSet peut sutiliser pour excuter des procdures stockes
avec ou sans paramtres. Une procdure stocke avec paramtres peut
obtenir la valeur de ses paramtres de tout DataSet ou ParameterRow. Pour
un exemple, voir Utilisation de paramtres avec des procdures stockes
Oracle PL/SQL, page 6-5.
Utilisez le pilote de base de donnes pour parcourir ou modifier les objets
schma spcifiques aux serveurs de bases de donnes, y compris les
tables, les champs, les dfinitions de procdure stocke ou les index. Pour
davantage dinformations sur le pilote de base de donnes, choisissez
Outils|Pilote de base de donnes et consultez son aide en ligne.
Les sujets suivants, relatifs aux procdures stockes, sont abords dans
cette rubrique :
Squences dchappement, instructions SQL et appels de procdure
spcifiques au serveur
Utilisation de procdures stockes InterBase
Proprit But
database Spcifie lobjet de connexion Database sur lequel excuter la
procdure.
procedure Une reprsentation sous forme dune chane Java de la squence
dchappement ou de linstruction SQL de la procdure stocke
provoquant lexcution de la procdure stocke.
paramtres Un ReadWriteRow optionnel utilis pour remplir les paramtres.
Ces valeurs peuvent provenir de tout DataSet ou ReadWriteRow.
executeOnOpen Entrane lexcution de la procdure ds louverture du
ProcedureDataSet. Cette option est utile pour afficher des donnes
relles la conception. Cette option peut galement tre active
lexcution. La valeur par dfaut est true.
loadOption Une valeur entire optionnelle qui dfinit la mthode de chargement
des donnes dans lensemble de donnes. Les options possibles
sont :
1 Charger toutes les lignes : charge toutes les donnes en une seule
fois.
2 Charger les lignes de faon asynchrone : provoque la lecture des
lignes de lensemble de donnes dans un thread distinct. Cela
permet daccder aux donnes de lensemble de donnes et de les
afficher alors que le composant QueryDataSet est en train de lire
des lignes dans la connexion de base de donnes.
3 Charger si ncessaire : charge les lignes quand elles sont
ncessaires.
4 Charger une ligne la fois : charge la demande et remplace la
ligne prcdente par la ligne en cours. Option utile pour les
applications traitant de gros volumes de donnes par lots.
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s 6-3
P r o c d u r e s s t o c k e s : t r u c s & a s t u c e s
Utilisation de paramtres avec des procdures stockes Oracle PL/
SQL
Utilisation des procdures stockes Sybase
Procdures stockes : trucs & astuces
Cette section contient des conseils qui vous aideront mieux comprendre
les options dutilisation dune procdure stocke.
Remarque Pour plus dinformations sur lutilisation de procdures stockes avec
JDataStore, voir Procdures stockes et FDU dans le Guide du
dveloppeur JDataStore.
Squences dchappement, instructions SQL et appels de
procdure spcifiques au serveur
Quand vous saisissez des informations dans la zone Instruction SQL ou
Escape de procdure stocke de lditeur de la proprit procedure ou dans
le code, vous pouvez saisir trois types dinstructions. Les voici :
Slectionner une procdure existante.
Pour rechercher dans la base de donnes une procdure existante,
cliquez sur Parcourir les procdures dans lditeur de proprit
procedure. Une liste des noms des procdures disponibles dans la base
de donnes laquelle vous tes connect est affiche. Si le serveur est
InterBase et si vous avez slectionn une procdure ne renvoyant pas
de donnes, vous en tes inform. Si vous slectionnez une procdure
renvoyant des donnes, JBuilder tente de gnrer la syntaxe
dchappement correcte pour lappel de la procdure. Il peut tre
nanmoins ncessaire de modifier linstruction gnre
automatiquement afin quelle corresponde exactement la syntaxe de
votre serveur. Pour dautres bases de donnes, seul le nom de la
procdure est insr depuis la bote de dialogue de slection dune
procdure.
Si la procdure attend des paramtres, vous devez les faire
correspondre avec les noms de colonne des paramtres.
Saisir une squence dchappement de procdure JDBC.
Pour ce faire, utilisez les formatage suivants :
{call PROCEDURENAME (?,?,?,...)} pour les procdures
{?= call FUNCTIONNAME (?,?,?,...)} pour les fonctions
Saisir une syntaxe spcifique au serveur pour les appels de procdure.
6-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s s p c i f i q u e s u n f o u r n i s s e u r
Quand un serveur reconnat une syntaxe distincte pour les appels de
procdure, vous pouvez utiliser cette syntaxe au lieu dune procdure
stocke existante ou dune squence dchappement de procdure
JDBC. Ainsi, une syntaxe spcifique au serveur peut avoir laspect
suivant :
execute procedure PROCEDURENAME ?,?,?
Dans les deux derniers exemples, les indicateurs de paramtres (les points
dinterrogation) peuvent tre remplacs par des paramtres nomms
ayant la forme :NomParam. Pour un exemple dutilisation de paramtres
nomms, voir Utilisation de paramtres avec des procdures stockes
Oracle PL/SQL, page 6-5. Pour un exemple dutilisation de procdures
stockes InterBase, voir Utilisation de procdures stockes InterBase,
page 6-5.
Utilisation des procdures stockes spcifiques un fournisseur
Cette section contient des informations qui vous aideront utiliser des
procdures stockes avec des fournisseurs de bases de donnes
spcifiques. Ces informations servent lutilisation des types de
procdures stockes suivants :
Procdures stockes et fonctions dfinies par lutilisateur pour
JDataStore
Procdures stockes InterBase
Procdures stockes Oracle PL/SQL
Procdures stockes Sybase
Utilisation avec JDataStore de procdures stockes et de
fonctions dfinies par lutilisateur
JDataStore 6 prend en charge lutilisation des procdures stockes et des
fonctions dfinies par lutilisateur (FDU) Les procdures stockes et les
FDU doivent tre ajoutes au CLASSPATH du processus serveur.
JDataStore. Les procdures stockes et les FDU pour JDataStore doivent
tre crites en Java. Les FDU sont des fonctions dfinies par lutilisateur
destines servir dans les sous-expressions dune instruction SQL.
Pour plus dinformations, comprenant les instructions dutilisation et des
exemples, voir FDU et procdures stockes dans le Guide du dveloppeur
JDataStore.
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s 6-5
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s s p c i f i q u e s u n f o u r n i s s e u r
Utilisation de procdures stockes InterBase
Dans InterBase, les procdures SELECT peuvent tre utilises pour
gnrer un DataSet. Dans la base de donnes exemple InterBase,
employee.gdb, la procdure stocke ORG_CHART en est une illustration.
Pour appeler cette procdure depuis JBuilder, entrez la syntaxe suivante
dans la zone Instruction SQL ou Escape de procdure stocke de lditeur
de la proprit procedure ou dans votre code :
select * from ORG_CHART
Pour des exemples de procdures stockes InterBase plus complexes,
utilisez le pilote de base de donnes pour parcourir les procdures de ce
serveur. ORG_CHART est un exemple intressant. Il renvoie un ensemble
de rsultats combinant les donnes de plusieurs tables. ORG_CHART est
crit avec le langage InterBase de procdures et de dclencheurs qui
contient les instructions SQL de manipulation de donnes, des structures
de contrle et la gestion des exceptions.
Les paramtres de sortie de ORG_CHART deviennent des colonnes de
lensemble de donnes produit.
Pour plus dinformations sur lcriture de procdures stockes InterBase,
consultez la documentation du serveur InterBase.
Utilisation de paramtres avec des procdures stockes
Oracle PL/SQL
Habituellement, un ProcedureDataSet ne peut tre rempli par des
procdures stockes Oracle PL/SQL que si vous utilisez les pilotes JDBC
Oracle de type 2 ou 4. La procdure stocke qui est appele doit tre une
fonction dont le type de retour est un CURSOR REF.
Respectez les principes suivants pour utiliser les procdures stockes
Oracle dans JBuilder :
1 Dfinissez la fonction en utilisant PL/SQL.
Le code suivant est un exemple de description de fonction dfini en
PL/SQL renvoyant un CURSOR REF. Cet exemple suppose lexistence
dune table nomme MyTable1.
create or replace function MyFct1(INP VARCHAR2) RETURN rcMyTable1 as
type rcMyTable1 is ref cursor return MyTable1%ROWTYPE;
rc rcMyTable;
begin
open rc for select * from MyTable1;
return rc;
end;
2 Dfinissez un ParameterRow transmettre au ProcedureDescriptor.
6-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s s p c i f i q u e s u n f o u r n i s s e u r
Le paramtre de saisie INP doit tre spcifi dans le ParameterRow, mais
pas la valeur spciale renvoye comme CURSOR REF. JBuilder utilise
la valeur renvoye pour remplir de donnes le ProcedureDataSet. Le code
suivant illustre la manire demployer un ParameterRow.
ParameterRow row = new ParameterRow();
row.addColumn( "INP", Variant.STRING, ParameterType.IN);
row.setString("INP", "Input Value");
String proc = "{?=call MyFct1(?)}";
3 Slectionnez le fichier cadre dans le volet projet puis slectionnez
longlet Conception.
4 Placez dans le volet contenu un composant ProcedureDataSet de longlet
DataExpress.
5 Slectionnez la proprit procedure afin dafficher la bote de dialogue
ProcedureDescriptor.
6 Slectionnez database1 dans la liste droulante des bases de donnes.
7 Entrez la syntaxe dchappement suivante dans la zone Instruction SQL
ou Escape de procdure stocke ou dans le code :
{?=call MyFct1(?)}
8 Slectionnez longlet Paramtres de la bote de dialogue. Slectionnez le
ParameterRow qui vient dtre dfini.
Consultez la documentation de votre serveur Oracle pour davantage
dinformations sur le langage Oracle PL/SQL.
Utilisation des procdures stockes Sybase
Les procdures stockes cres sur des serveurs Sybase le sont en mode
transaction chane. Pour que les procdures stockes Sybase puissent tre
appeles en tant que partie dun ProcedureResolver, elles doivent tre
modifies pour sexcuter en mode transaction non chane. Pour ce faire,
utilisez la procdure systme sp_procxmode de Sybase pour changer le
mode de transaction en anymode ou unchained. Pour plus de dtails,
voir la documentation Sybase.
Exemple dapplication avec des procdures stockes
spcifiques au serveur de la base de donnes
Une application exemple, situe dans le rpertoire <jbuilder>/samples/
DataExpress/ServerSpecificProcedures, contient un code intgrant des
procdures stockes pour les bases de donnes JDataStore, Sybase,
InterBase et Oracle.
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s 6-7
E c r i t u r e d u n f o u r n i s s e u r d e d o n n e s p e r s o n n a l i s
Ecriture dun fournisseur de donnes personnalis
JBuilder simplifie lcriture dun fournisseur personnalis de donnes
quand vous utilisez une source de donnes personnalise comme SAP,
BAAN, IMS, OS/390, CICS, VSAM, DB2, etc.
La lecture et lactualisation des donnes dune source de donnes comme
un serveur Oracle ou Sybase sont isoles dans deux principales interfaces :
fournisseurs et rsolveurs. Les fournisseurs remplissent un ensemble de
donnes partir de la source de donnes. Les rsolveurs crivent en retour
les modifications dans la source de donnes. Sparer nettement
lacquisition et la rsolution des donnes en deux interfaces facilite la
cration de nouveaux composants dacquisition/rsolution pour de
nouvelles sources de donnes. JBuilder fournit des implmentations pour
les pilotes JDBC standard qui donnent accs des bases de donnes
courantes comme Oracle, Sybase, Informix, InterBase, DB2, MS SQL
Server, Paradox, dBASE, FoxPro, Access, et dautres bases de donnes
rpandues. Notamment,
OracleProcedureProvider
ProcedureProvider
ProcedureResolver
QueryProvider
QueryResolver
Vous pouvez crer des implmentations de composants fournisseur/
rsolveur personnaliss pour EJB, des serveurs dapplications, SAP,
BAAN, IMS, CICS, etc.
Un projet exemple ayant un fournisseur et un rsolveur personnaliss se
trouve dans le rpertoire /samples/DataExpress/CustomProviderResolver de
votre installation de JBuilder. Le fichier exemple TestApp.java est une
application avec un cadre contenant un JdbTable et un JdbNavToolBar. Ces
deux composants visuels sont connects un composant TableDataSet dont
les donnes sont fournies par un fournisseur personnalis (dfini dans le
fichier ProviderBean.java), et sont enregistres avec un rsolveur
personnalis (dfini dans le fichier ResolverBean.java). Cette application
exemple lit les donnes et enregistre les modifications dans le fichier texte
data.txt, un fichier simple, non dlimit. La structure de data.txt est
dcrite dans le fichier interface DataLayout.java.
Cette rubrique dcrit les fournisseurs de donnes personnaliss et
explique comment ils peuvent tre utiliss comme fournisseurs dun
TableDataSet et de tout DataSet driv de TableDataSet. La mthode
principale implmenter est
provideData(com.borland.dx.dataset.StorageDataSet dataSet, boolean toOpen).
Cette mthode accde aux mtadonnes et charge les donnes relles dans
lensemble de donnes.
6-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E c r i t u r e d u n f o u r n i s s e u r d e d o n n e s p e r s o n n a l i s
Obtention des mtadonnes
Les mtadonnes sont des informations sur les donnes. Par exemple, le
nom de la colonne, le nom de la table, si la colonne fait partie de
lidentificateur de ligne unique, sa prcision, son chelle, etc. Ces
informations sont gnralement obtenues depuis la source de donnes.
Les mtadonnes sont ensuite stockes dans les proprits Column des
composants pour chaque colonne du StorageDataSet et dans le
StorageDataSet lui-mme.
Lorsque vous obtenez des donnes dune source de donnes et que vous
les stockez dans une des sous-classes du StorageDataSet, vous rcuprez
gnralement les mtadonnes en plus des lignes de donnes. Par
exemple, la premire fois que vous demandez un QueryDataSet dexcuter
une requte, il en excute deux par dfaut : une pour dcouvrir les
mtadonnes et lautre pour extraire les lignes de donnes que votre
application affichera et manipulera. Les requtes suivantes lances par
cette instance du QueryDataSet ne rcupreront que les donnes. Une fois
que les mtadonnes sont dcouvertes, le composant QueryDataSet cre
automatiquement les objets Column lexcution, ds quils sont
ncessaires. Un objet Column est cr pour chaque colonne de la requte qui
nest pas encore dans le QueryDataSet. Chaque Column obtient ses proprits
des mtadonnes, comme columnName, tableName, rowId, searchable, precision,
scale, etc.
Quand vous implmentez la mthode abstraite provideData() partir de la
classe Provider, des colonnes issues des donnes fournies peuvent avoir
besoin dtre ajoutes votre DataSet. Cela peut tre fait par lappel de la
mthode ProviderHelp.initData() depuis votre implmentation de
provideData(). Votre fournisseur doit construire un tableau de colonnes
passer la mthode ProviderHelp.initData(). Voici la liste des proprits de
colonnes quun Provider doit initialiser :
columnName
dataType
et, de faon facultative,
sqlType
precision (utilise par DataSet)
scale (utilise par DataSet)
rowId
searchable
tableName
schemaName
serverColumnName
Les proprits facultatives sont utiles lorsque vous enregistrez en retour
vos modifications dans la source de donnes. Les proprits precision et
U t i l i s a t i o n d e s p r o c d u r e s s t o c k e s 6-9
E c r i t u r e d u n f o u r n i s s e u r d e d o n n e s p e r s o n n a l i s
scale sont galement utilises par les composants DataSet des fins de
contrainte et daffichage.
Appel de initData
Les arguments de la mthode
ProviderHelp.initData(com.borland.dx.dataset.StorageDataSet dataSet,
com.borland.dx.dataset.Column[], boolean, boolean, boolean) sont
expliqus ci-aprs.
dataSet est le StorageDataSet qui nous fournissons les donnes
metaDataColumns est le tableau de Column cr avec les proprits qui nont
pas besoin dtre ajoutes/intgres aux colonnes existant dj dans le
DataSet
updateColumns spcifie sil faut intgrer les colonnes dans des colonnes
persistantes existantes de mme columnName
keepExistingColumns spcifie sil faut garder les colonnes non persistantes
Si keepExistingColumns est true, les colonnes non persistantes sont
galement retenues. Plusieurs proprits du tableau de colonnes sont
intgres aux colonnes existantes du StorageDataSet qui ont la mme
valeur de la proprit name. Si le nombre, le type et la position des colonnes
sont diffrents, cette mthode peut fermer le StorageDataSet associ.
La proprit metaDataUpdate du StorageDataSet est examine lors de lappel
de ProviderHelp.initData. Cette proprit contrle quelles proprits de
Column redfinissent les proprits des colonnes persistantes prsentes
dans le TableDataSet avant lappel de ProviderHelp.initData. Les valeurs
correctes pour cette proprit sont dfinies dans linterface MetaDataUpdate.
Obtention des donnes relles
Certaines mthodes DataSet ne peuvent pas tre utilises quand la
mthode Provider.provideData a t appele pour ouvrir un DataSet,
pendant que le DataSet est en train dtre ouvert, en particulier la mthode
StorageDataSet.insertRow().
Afin de charger les donnes, utilisez la mthode
StorageDataSet.startLoading. Cette mthode renvoie un tableau dobjets
Variant pour toutes les colonnes dun DataSet. Vous dfinissez les valeurs
dans le tableau (les valeurs ordinales des colonnes sont renvoyes par la
mthode ProviderHelp.initData), puis chargez chaque ligne en appelant la
mthode StorageDataSet.loadRow() puis vous terminez en appelant la
mthode StorageDataSet.endLoading().
6-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E c r i t u r e d u n f o u r n i s s e u r d e d o n n e s p e r s o n n a l i s
Conseils pour la conception dun fournisseur de donnes
personnalis
Un fournisseur bien conu reconnat les proprits maxRows et maxDesignRows
dun StorageDataSet. Les valeurs de ces proprits sont :
Pour dterminer si la mthode provideData() a t appele pendant la
conception, appelez java.beans.Beans.isDesignTime().
Explication de la mthode provideData() dans des ensembles de
donnes matre-dtail
La mthode Provider.provideData() est appele
la premire fois que le StorageDataSet est ouvert (toOpen est true)
quand StorageDataSet.refresh() est appele
quand un ensemble de donnes dtail dont la proprit fetchAsNeeded
vaut true a besoin dtre charg
Quand un ensemble de donnes dtail avec la proprit fetchAsNeeded
true a besoin dtre charg, le fournisseur ignore provideData pendant
louverture des donnes, ou fournit seulement les mtadonnes. Le
fournisseur utilise galement les valeurs des champs masterLink pour
fournir les lignes dun ensemble de donnes dtail spcifique.
Valeur Description
0 fournit seulement les mtadonnes
-1 fournit toutes les donnes
n fournit un maximum de n lignes
M a n i p u l a t i o n d e s c o l o n n e s 7-1
C h a p i t r e
7
Chapitre7Manipulation des colonnes
Une colonne est une collection dinformations de mme type, par exemple
une collection de numros de tlphone ou dintituls de postes
professionnels. Une collection de composants colonne (Column) est gre
par un composant StorageDataSet.
Un objet colonne peut tre cr explicitement dans du code ou gnr
automatiquement quand vous instanciez une sous-classe de
StorageDataSet, par exemple un composant QueryDataSet lors de lexcution
dune requte. Chaque objet Column possde des proprits qui dcrivent
ou grent la colonne de donnes. Certaines des proprits dune colonne
contiennent des mtadonnes (voir la dfinition plus bas) gnralement
obtenues de la source de donnes. Dautres proprits contrlent laspect
et ldition de la colonne pour les composants orients donnes.
Remarque Les noms de classes abstraites ou de classes suprieures sont
frquemment utiliss pour dsigner toutes leurs sous-classes. Par
exemple, une rfrence un objet StorageDataSet dsigne une ou, selon les
cas, toutes ses sous-classes : QueryDataSet, TableDataSet, ProcedureDataSet et
DataSetView.
Prsentation des proprits et mtadonnes de colonne
La plupart des proprits dune colonne peuvent tre modifies sans
ncessit de fermer puis de rouvrir le DataSet. Cependant, les proprits
suivantes ne peuvent tre dfinies que si le DataSet est ferm :
columnName
dataType
calcType
pickList
preferredOrdinal
7-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P r s e n t a t i o n d e s p r o p r i t s e t m t a d o n n e s d e c o l o n n e
Le concepteur dinterface utilisateur fera des mises jour dynamiques
pour les proprits daffichage du composant Column, comme color, width et
caption. Pour davantage dinformations sur lobtention de mtadonnes,
voir Obtention des mtadonnes, page 6-8. Pour plus de dtails sur
lobtention de donnes relles, voir Obtention des donnes relles,
page 6-9.
Proprits dune colonne qui ne sont pas des mtadonnes
Les colonnes ont dautres proprits qui ne sont pas obtenues des
mtadonnes et que vous pouvez initialiser comme caption, editMask,
displayMask, les couleurs background et foreground ou alignment.
Gnralement, ce type de proprit est conu pour contrler laspect que
prend par dfaut llment de donnes dans les composants orients
donnes ou pour contrler comment il peut tre modifi par lutilisateur.
Les proprits dfinies dans une application sont gnralement de type
non mtadonnes.
Visualisation des informations de colonnes dans le
concepteur de colonne
Utiliser le concepteur de colonne est une des faons dexaminer les
informations relatives aux proprits des colonnes. Le concepteur de
colonne affiche les informations pour les proprits slectionnes, par
exemple le type de donnes de la colonne, dans une table navigable.
Modifier ou dfinir une proprit dans le concepteur de colonne rend
cette colonne persistante. Les proprits des colonnes peuvent tre
modifies dans le concepteur de colonne ou dans linspecteur. Vous
pouvez modifier les proprits afficher dans le concepteur de colonne en
cliquant sur le bouton Proprits.
Pour afficher le concepteur de colonne,
1 Ouvrez un projet incluant un objet DataSet.
Dans notre exemple, ouvrez /samples/DataExpress/QueryProvider/
QueryProvider.jpx dans le rpertoire o est install JBuilder.
2 Double-cliquez sur le fichier Frame1.java dans le volet projet et cliquez
sur longlet Conception en bas du volet droit de lAppBrowser.
3 Cliquez avec le bouton droit sur lobjet queryDataSet1 dans le volet
contenu, choisissez Activer le concepteur dans le menu contextuel.
M a n i p u l a t i o n d e s c o l o n n e s 7-3
P r s e n t a t i o n d e s p r o p r i t s e t m t a d o n n e s d e c o l o n n e
Cela affiche le concepteur de colonne pour lensemble de donnes
prsent dans la fentre de conception. Pour la table exemple
EMPLOYEE, le concepteur de colonne ressemble ce qui suit :
Pour dfinir une proprit dune colonne, slectionnez cette Column et
entrez, ou slectionnez, la nouvelle valeur de la proprit. Linspecteur
reflte les proprits (et les vnements) de la colonne slectionne. Par
exemple,
1 Cliquez sur le bouton Proprits pour ouvrir la bote de dialogue
Proprits afficher.
2 Cochez la proprit min pour quelle saffiche dans le concepteur de
colonne et cliquez sur OK.
3 Allez jusqu la colonne min, entrez la date du jour dans le champ
HIRE_DATE, en respectant le format de date suivant :
AAAA-MM-JJ hh:mm:ss.nnnnnnnnn
o AAAA-MM-JJ reprsente lanne, le mois et le jour et
hh:mm:ss.nnnnnnnnn reprsente lheure, les minutes, les secondes et,
ventuellement, les nanosecondes.
4 Appuyez sur Entre pour modifier la valeur.
Pour fermer le concepteur de colonne, slectionnez nimporte quel
composant de linterface utilisateur dans le volet contenu, ou cliquez avec
le bouton droit sur un autre composant, et slectionnez Activer le
concepteur. En dautres termes, la seule faon de fermer un concepteur est
den ouvrir un autre.
Voir la rubrique Garantie de la persistance des donnes, page 12-25,
pour avoir plus dinformations sur lutilisation du concepteur de colonne.
Bouton Crer une classe RowIterator
Le gnrateur de RowIterator du concepteur de colonne peut servir
crer une nouvelle classe RowIterator ou mettre jour une classe
RowIterator existante pour un DataSet. Il prend en compte la proprit
7-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P r s e n t a t i o n d e s p r o p r i t s e t m t a d o n n e s d e c o l o n n e
columnName de toutes les Columns du DataSet et il gnre des mthodes get et
set pour chacune dentre elles.
La slection du bouton gnrateur de RowIterator ouvre une bote de
dialogue qui offre des fonctionnalits ditration allges (faible
consommation de mmoire et liaison rapide) garantissant un accs
statique aux colonnes avec scurit des types.
Les options de la bote de dialogue RowIterator prsentent les fonctions
suivantes :
Pour davantage dinformations sur les RowIterator, voir la Rfrence de la
bibliothque des composants DataExpress.
Utilisation du concepteur de colonne pour rendre
persistantes des mtadonnes
Choisissez le bouton Continuer toutes les mtadonnes dans le concepteur
de colonne afin de rendre persistantes toutes les mtadonnes ncessaires
louverture dun QueryDataset lexcution.
Le code source est modifi avec les initialisations suivantes :
La requte du QueryDataSet est modifie pour inclure les colonnes
didentification de ligne.
La proprit metaDataUpdate de QueryDataSet prend la valeur NONE.
Tableau 7.1 Bote de dialogue Cration dun RowIterator
Option Description
Etendre RowIterator Lorsque cette option est dfinie, la classe gnre
tendra RowIterator. Cela exposera toutes les mthodes
de RowIterator. Si loption nest pas slectionne, sera
cre une nouvelle classe avec un membre RowIterator
qui est dlgu pour toutes les oprations. Lintrt ne
pas tendre RowIterator est que votre classe itrateur
peut contrler ce qui sera expos. Lintrt tendre
RowIterator est quil y a moins de code gnrer car les
mthodes de lien et de navigation sont hrites et de
nont pas besoin dtre dlgues.
Retirer les souligns ;
mettre en majuscules
la lettre suivante
Cela affecte la faon dont sont gnrs les noms des
mthodes get et set partir de la proprit columnName de
la Column. Si cette option est dfinie, les souligns sont
retirs et le caractre qui suivait le soulign avant le
retrait passe en majuscule.
Gnrer les mthodes
de lien
Gnre les mthodes dlgues pour appeler les
mthodes de lien du RowIterator imbriqu.
Gnrer les mthodes
de navigation
Gnre les mthodes dlgues pour appeler les
mthodes de navigation du RowIterator imbriqu.
M a n i p u l a t i o n d e s c o l o n n e s 7-5
P r s e n t a t i o n d e s p r o p r i t s e t m t a d o n n e s d e c o l o n n e
Les proprits tableName, schemaName et resolveOrder du QueryDataSet sont
initialises si ncessaire.
Toutes les colonnes deviennent persistantes avec diverses proprits
initialises. Ces proprits sont precision, scale, rowId, searchable,
tableName, schemaName, hidden, serverColumnName et sqlType.
JBuilder extrait les mtadonnes automatiquement. Etant donn que
certains pilotes JDBC sont lents pour rpondre aux demandes de
mtadonnes, vous pouvez rendre les mtadonnes persistantes et
indiquer DataExpress de ne pas les extraire. Si JBuilder paramtre ceci
la conception et gnre le code ncessaire pour lexcution, les
performances sont amliores.
Voir aussi Persistance des mtadonnes dune requte, page 5-11
Utilisation du concepteur de colonne pour rendre
dynamiques des mtadonnes
Attention Appuyer sur le bouton Rendre toutes les mtadonnes dynamiques
SUPPRIME LE CODE du fichier source. Cela retirera tout le code des
dfinitions des proprits mentionnes dans la rubrique prcdente, ainsi
que toutes les dfinitions des proprits concernant les mtadonnes
nonces ci-dessus. En revanche, dautres proprits, comme editMask, ne
sont pas modifies.
Remarque Pour actualiser une requte aprs une modification de la table sur le
serveur, vous devez tout dabord rendre dynamiques les mtadonnes
puis les rendre persistantes afin dutiliser les nouveaux index crs dans la
table de la base de donnes.
Visualisation des informations des colonnes dans le pilote
de base de donnes
Le pilote de base de donnes est un navigateur de base de donnes
entirement Java, vous permettant de modifier les donnes. Il prsente les
mta-informations bases sur JDBC dans une fentre deux volets. Le
volet gauche contient une arborescence qui affiche de faon hirarchique
un ensemble de bases de donnes et ses tables, vues, procdures stockes
et mtadonnes associes. Le volet droit affiche sur plusieurs pages des
informations qui dcrivent chaque nud de larborescence.
7-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
O p t i m i s a t i o n d u n e r e q u t e
Pour afficher le pilote de base de donnes, choisissez Outils|Pilote de base
de donnes dans le menu JBuilder.
Lorsquune URL de base de donnes est ouverte, vous pouvez dvelopper
larborescence pour afficher les objets enfant. Les colonnes sont les objets
enfant dune table particulire dans la base de donnes. Comme dans la
figure prcdente, lorsque lobjet Column est slectionn pour une table,
la page Rsum du volet droit contient la liste des colonnes avec leurs
types de donnes, tailles et autres.
Slectionnez une colonne dans le volet gauche pour voir uniquement les
informations concernant ce champ, comme dans la figure ci-dessous.
Pour avoir plus dinformations sur lutilisation du pilote de base de
donnes, voir laide qui lui est consacre.
Optimisation dune requte
Cette section explique comment utiliser les colonnes pour amliorer les
performances des requtes.
M a n i p u l a t i o n d e s c o l o n n e s 7-7
O p t i m i s a t i o n d u n e r e q u t e
Dfinition des proprits dune colonne
Les proprits dun objet Column peuvent tre dfinies via les outils de
conception visuelle de JBuilder ou, manuellement, par du code. Toute
colonne dfinie ou modifie en utilisant les outils de conception visuelle
devient une colonne persistante.
Dfinition des proprits des colonnes en utilisant les outils de
conception visuelle de JBuilder
Linspecteur permet de manipuler les proprits dun objet Column. Pour
affecter les proprits dune colonne :
1 Ouvrez (ou crez) un projet contenant lobjet StorageDataSet que vous
voulez manipuler. Si vous crez un nouveau projet, vous pouvez suivre
les instructions de Interrogation dune base de donnes, page 5-2.
2 Ouvrez le concepteur dinterface utilisateur en double-cliquant sur
lobjet conteneur Frame dans le volet projet, puis en cliquant sur longlet
Conception de lAppBrowser.
3 Dans le volet contenu, slectionnez le composant StorageDataSet.
4 Cliquez sur licne dextension ct du StorageDataSet pour afficher
ses colonnes.
5 Slectionnez lobjet Column que vous voulez manipuler. Linspecteur
affiche les proprits et vnements de la colonne. Dfinissez les
proprits de votre choix.
Dfinition des proprits dans le code
Pour affecter manuellement, dans votre code source, les proprits dune
ou de plusieurs colonnes dun composant StorageDataSet :
1 Fournissez des donnes au StorageDataSet.
Par exemple, excutez une requte en utilisant un composant
QueryDataSet. Voir un exemple dans Interrogation dune base de
donnes, page 5-2.
2 Obtenez un tableau de rfrences aux objets Column existant dans le
StorageDataSet en appelant la mthode getColumn(java.lang.String) du
ReadRow.
3 Identifiez la ou les colonnes du tableau que vous voulez utiliser en
lisant leurs proprits, par exemple en utilisant la proprit
getColumnName() du composant Column.
4 Affectez les proprits des colonnes appropries.
7-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
O p t i m i s a t i o n d u n e r e q u t e
Remarque Si vous voulez que linitialisation de la proprit soit conserve la
prochaine lecture des donnes, affectez la valeur true la proprit persist
de la colonne. Ces tapes sont dcrites dans les chapitres suivants.
Colonnes persistantes
Une colonne persistante est un objet Column qui faisait dj partie dun
StorageDataSet et dont la proprit persist a t dfinie true avant la
fourniture de donnes. Si la proprit persist est dfinie aprs la
fourniture des donnes, vous devez excuter une autre commande
setQuery avec un nouveau queryDescriptor, pour que lapplication
reconnaisse la persistance des colonnes. Un objet Column persistant permet
de conserver le paramtrage des proprits de lobjet Column durant une
opration de fourniture de donnes. Une colonne persistante ne provoque
pas le gel des donnes des lignes pour cette colonne durant les oprations
de fourniture de donnes.
Normalement, un objet StorageDataSet cre automatiquement de nouveaux
objets Column pour chaque colonne trouve dans les donnes fournies par
la source de donnes. Il ne tient pas compte des objets Column ajouts
explicitement au pralable ou crs automatiquement pour un lot
prcdent de donnes. Cet abandon des objets Column antrieurs peut
provoquer la perte du paramtrage de proprits de lancien objet Column
que vous vouliez conserver.
Pour viter cela, marquez une colonne comme persistante en affectant la
valeur true sa proprit persist. Quand une colonne est persistante,
lobjet Column nest pas abandonn lorsque de nouvelles donnes sont
fournies lobjet StorageDataSet. Au contraire, lobjet Column existant est
r-utilis pour contrler la mme colonne dans les donnes nouvellement
fournies. La correspondance de colonne se base sur le nom de colonne.
Toute colonne dfinie ou modifie en utilisant les outils de conception
visuelle devient une colonne persistante. Les colonnes persistantes sont
traites plus en dtail dans Garantie de la persistance des donnes,
page 12-25. Vous pouvez crer explicitement des objets Column et les
attacher un composant StorageDataSet en utilisant addColumn() pour
ajouter une seule colonne ou setColumns() pour ajouter plusieurs colonnes
en une seule fois.
Si vous utilisez addColumn, vous devez dfinir la colonne comme persistante
avant dobtenir les donnes de la source ; vous perdriez sinon toutes les
proprits de la colonne lors de la lecture des nouvelles donnes. La
proprit persist est initialise automatiquement par la mthode
setColumns.
Remarque Le concepteur dinterface utilisateur appelle la mthode
StorageDataSet.setColumns() pour manipuler des colonnes. Si vous voulez
charger et modifier votre application dans le concepteur dinterface
M a n i p u l a t i o n d e s c o l o n n e s 7-9
O p t i m i s a t i o n d u n e r e q u t e
utilisateur, utilisez la mthode setColumns afin que les colonnes soient
reconnues la conception. A lexcution, il ny a pas de diffrences entre
setColumns et addColumn.
Combinaison de mtadonnes dynamiques et de colonnes
persistantes
Lors de la phase de lecture des donnes, un objet StorageDataSet
commence, si cest possible, par obtenir des mtadonnes de la source de
donnes. Ces mtadonnes sont utilises pour actualiser les ventuelles
colonnes persistantes et pour crer les autres colonnes ncessaires. La
proprit metaDataUpdate de la classe StorageDataSet contrle la porte de
lactualisation des mtadonnes effectues sur les colonnes persistantes.
Suppression des colonnes persistantes
Cette section dcrit comment annuler la persistance des colonnes afin
quune requte modifie ne renvoie plus les colonnes (non voulues) dun
StorageDataSet.
Lorsque vous disposez dun QueryDataSet ou dun TableDataSet avec des
colonnes persistantes, vous dclarez que ces colonnes existent dans le
DataSet rsultant indpendamment de leur existence dans la source de
donnes correspondante. Mais quadvient-il si vous ne voulez plus de ces
colonnes persistantes ?
Lorsque vous modifiez la chane de requte dun QueryDataSet, vos
anciennes colonnes persistantes ne sont pas perdues. Les nouvelles
colonnes issues de lexcution de la requte sont ajoutes votre liste de
colonnes. Vous pouvez rendre persistantes ces nouvelles colonnes en
dfinissant certaines de leurs proprits.
Remarque Lorsque vous tendez un StorageDataSet en cliquant sur son icne
dextension dans le volet contenu, la liste des colonnes ne change pas
automatiquement lorsque vous modifiez la chane de requte. Pour
rafrachir la liste des colonnes en fonction des rsultats de la requte
modifie, double-cliquez sur le QueryDataSet dans le volet contenu. Cela
excute de nouveau la requte et ajoute toute nouvelle colonne trouve
dans la requte modifie.
Pour supprimer une colonne persistante inutile, slectionnez-la dans le
volet contenu et appuyez sur la touche Suppr. Vous pouvez aussi
slectionner la colonne dans le concepteur de colonne et cliquer sur le
bouton Supprimer dans la barre doutils. Les actions suivantes sont
dclenches :
La colonne est marque comme non persistante ;
Tout code qui dfinit les proprits de cette colonne est supprim ;
7-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
O p t i m i s a t i o n d u n e r e q u t e
Toute logique de gestionnaire dvnement place sur cette colonne est
retire.
Pour vrifier quune colonne persistante supprime ne fait plus partie du
QueryDataSet, double-cliquez sur lensemble de donnes dans le volet
contenu. Cela r-excute la requte et affiche toutes les colonnes dans le
QueryDataSet rsultant.
Utilisation de colonnes persistantes pour ajouter des colonnes
vides un ensemble de donnes
Vous pouvez, dans certains cas, ajouter au composant StorageDataSet une
ou plusieurs colonnes qui ne sont pas fournies par la source de donnes et
qui ne doivent pas tre rsolues avec la source de donnes. Par exemple,
vous pouvez ajouter des colonnes supplmentaires dans les circonstances
suivantes ou des faons suivantes :
Ajouter une colonne supplmentaire pour des besoins internes
lapplication. Pour cacher ces colonnes laffichage dans les
composants orients donnes, affectez la valeur false la proprit
visible de la Column.
Construire un nouvel ensemble de donnes manuellement en ajoutant
les colonnes ncessaires avant de calculer les donnes qui vont tre
places dans ses lignes.
Construire un nouvel ensemble de donnes pour une source de
donnes personnalise qui nest pas gre par les modules
dacquisition de JBuilder et ne peut donc pas fournir automatiquement
de mtadonnes.
Dans de tels cas, vous pouvez ajouter explicitement un objet Column
lensemble de donnes avant ou aprs la fourniture de donnes. La valeur
de columnName doit tre unique et ne peut dupliquer un nom dj existant
dans les donnes fournies. De plus, si les donnes sont fournies aprs
lajout de la colonne, marquez la colonne comme persistante afin quelle
ne soit pas abandonne quand de nouvelles donnes seront fournies.
Pour ajouter une nouvelle colonne manuellement avec du code source,
suivez les instructions de la section Colonnes persistantes, page 7-8.
Pour ajouter manuellement une colonne en utilisant les outils de
conception visuelle de JBuilder,
1 Suivez les 3 premires tapes de la section Dfinition des proprits
des colonnes en utilisant les outils de conception visuelle de JBuilder,
page 7-7, afin dobtenir les mtadonnes des colonnes numres dans
le volet contenu.
Vous pouvez sauter ces tapes si vous voulez ajouter des colonnes un
ensemble de donnes vide.
2 Slectionnez <nouvelle colonne>.
M a n i p u l a t i o n d e s c o l o n n e s 7-11
O p t i m i s a t i o n d u n e r e q u t e
Cette option apparat en bas de la liste des colonnes.
3 Dans linspecteur, dfinissez la valeur de columnName, en vous assurant
que la valeur saisie est diffrente des noms de colonne existants.
4 Affectez les autres proprits ncessaires cette nouvelle colonne.
JBuilder cre du code source pour un nouvel objet Column persistant et
lattache lensemble de donnes. La nouvelle colonne existe avant mme
que des donnes soient fournies. Comme son nom est diffrent des noms
de colonne fournis, cette colonne nest pas remplie avec les donnes lors
de la phase dacquisition ; dans toutes les lignes, cette colonne contient
une valeur null.
Contrle de lordre des colonnes dans un ensemble de
donnes
Lorsque des donnes sont fournies au StorageDataSet, il accomplit les
actions suivantes :
Supprime les colonnes non persistantes en dplaant les colonnes
persistantes vers la gauche.
Fusionne les colonnes des donnes fournies avec les colonnes
persistantes. Si une colonne persistante porte le mme nom et a le
mme type de donnes quune colonne fournie, le systme considre
quil sagit de la mme colonne.
Place les colonnes fournies dans lensemble de donnes dans lordre
spcifi par la requte ou la procdure.
Ajoute les colonnes restantes - celles dfinies uniquement dans
lapplication - dans lordre dfini dans la mthode setColumns() de
lensemble de donnes.
Essaie de dplacer chaque colonne dont la proprit preferredOrdinal est
dfinie lendroit spcifi. (Cela est impossible si la position dfinie
dans la proprit preferredOrdinal est la mme pour deux colonnes.)
Cela implique que :
Les colonnes dfinies dans votre application mais non fournies par la
requte ou la procdure apparaissent aprs les colonnes fournies.
Le fait de dfinir des proprits sur certaines colonnes (aussi bien les
colonnes fournies que les colonnes dfinies dans lapplication), mais
pas sur dautres, ne change pas leur ordre.
Il est possible de modifier la position dune colonne en dfinissant sa
proprit preferredOrdinal. Les colonnes pour lesquelles la proprit
preferredOrdinal nest pas dfinie conservent leur position par rapport
aux autres.
7-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-1
C h a p i t r e
8
Chapitre8Enregistrement des
modifications dans la source
de donnes
Aprs avoir extrait les donnes dune source de donnes et les avoir
modifies dans le StorageDataSet, vous pouvez enregistrer les
modifications dans la source de donnes. Toutes les modifications
mmorises dans un ensemble de donnes peuvent tre enregistres dans
la source de donnes (par exemple un serveur SQL). Ce processus est
appel rsolution. Un mcanisme sophistiqu de rconciliation permet de
grer les problmes potentiels de modification.
Entre le moment o le sous-ensemble de donnes local est extrait dune
source de donnes et le moment o vous essayez denregistrer les donnes
dans la source de donnes, diverses situations peuvent se produire et tre
gres par la logique de rsolution. Par exemple, au moment denregistrer
les donnes, il est possible que les mmes informations aient t modifies
sur le serveur par un autre utilisateur. La rsolution doit-elle enregistrer
les nouvelles informations sans en tenir compte ? Doit-elle afficher les
informations modifies sur le serveur et les comparer avec vos
modifications ? Doit-elle annuler vos modifications ? Selon lapplication,
la logique des rgles de rsolution varie.
La logique intervenant dans la rsolution des modifications peut tre
assez complexe. Des erreurs peuvent se produire lors de lenregistrement,
par exemple des violations de contrainte dintgrit du serveur ou des
conflits de rsolution. Un conflit de rsolution peut se produire, par
exemple, lors de la suppression dune ligne dj supprime ou de la
modification dune ligne dj modifie par un autre utilisateur. JBuilder
propose une gestion par dfaut de ces erreurs en positionnant lensemble
8-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s
de donnes sur la ligne posant problme (si elle nest pas supprime) et en
affichant lerreur qui a eu lieu dans une bote de message.
Lors de la rsolution des modifications dans la source de donnes, ces
modifications sont normalement regroupes dans ce quon appelle des
transactions. DataExpress utilise par dfaut une seule transaction pour
enregistrer dans la source de donnes toutes les insertions, suppressions
et mises jour de lensemble de donnes. Pour disposer dun meilleur
contrle, JBuilder permet de modifier le traitement par dfaut des
transactions.
DataExpress propose galement un mcanisme standard de rsolution
compos de classes de base et dinterfaces. Vous pouvez les tendre en
spcifiant une logique personnalise de rsolution si vous avez besoin
dun contrle plus fin de la phase de rsolution. Ce mcanisme gnrique
peut galement sadapter des sources de donnes non JDBC qui,
gnralement, ne grent pas lutilisation de transactions.
Ce chapitre dcrit les diffrents modes de rsolution :
Enregistrement des modifications dun QueryDataSet, page 8-3,
dcrit le mcanisme de rsolution standard propos par DataExpress et
son traitement par dfaut des transactions.
Quand une relation matre-dtail a t tablie entre des ensembles de
donnes, il faut utiliser des procdures de rsolution particulires. Pour
davantage dinformations, voir Enregistrement des modifications
dans une relation matre-dtail, page 9-12.
Enregistrement des modifications dans la source de donnes par une
procdure stocke, page 8-6, dcrit la rsolution dans sa source de
donnes des modifications apportes un ProcedureDataSet.
Rsolution des donnes de plusieurs tables, page 8-10, indique les
paramtrages ncessaires la rsolution des modifications quand une
requte implique plusieurs tables.
Utilisation des ensembles de donnes avec RMI (mise en flux),
page 8-13, propose un moyen de placer les donnes dun ensemble de
donnes dans un flux en crant un objet Java (DataSetData) contenant les
donnes dun ensemble de donnes.
Personnalisation de la logique de rsolution par dfaut, page 8-16,
dcrit comment dfinir des rgles personnalises de rsolution en
utilisant le composant QueryResolver et les vnements de rsolution.
Exportation des donnes, page 3-3, dcrit comment exporter des
donnes dans un fichier texte.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-3
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d u n Q u e r y D a t a S e t
Enregistrement des modifications dun QueryDataSet
Vous pouvez utiliser diffrentes implmentations de Resolver pour
enregistrer les modifications apportes vos sources de donnes.
QueryDataSets utilise par dfaut un QueryResolver pour enregistrer les
modifications. Le rsolveur par dfaut peut tre remplac en dfinissant la
proprit StorageDataSet.resolver. Quand des donnes sont fournies
lensemble de donnes, le StorageDataSet surveille les informations dtat
des lignes (supprime, insre ou modifie) pour toutes les lignes. Quand
les donnes sont rsolues dans une source de donnes comme un serveur
SQL, les informations dtat des lignes sont utilises pour dterminer
comment les lignes sont ajoutes, retires ou modifies dans la table SQL.
Quand une ligne a t correctement rsolue, elle passe ltat rsolue
(RowStatus.UPDATE_RESOLVED, RowStatus.DELETE_RESOLVED ou
RowStatus.INSERT_RESOLVED). Si le StorageDataSet est une nouvelle fois
rsolu, les lignes dj rsolues ne sont pas prises en compte, sauf si des
modifications leur ont t apportes depuis la prcdente rsolution.
Cette section dcrit les caractristiques du mcanisme standard de
rsolution propos par le paquet DataExpress. Elle poursuit lexemple de
Interrogation dune base de donnes, page 5-2, jusqu la phase de
rsolution pendant laquelle les modifications sont enregistres dans la
source de donnes.
Pour cet exemple, vous pouvez dmarrer avec les fichiers exemple
achevs, situs dans le rpertoire /samples/DataExpress/QueryProvider ou
crer lapplication en suivant les tapes de Accs aux donnes des
exemples, page 11-2.
Interrogation dune base de donnes, page 5-2, a dcrit la phase
dacquisition des donnes pendant laquelle les donnes sont fournies par
une source de donnes. Ce passage expliquait comment instancier un
composant QueryDataSet et les composants dinterface utilisateur qui lui
sont associs, pour afficher les donnes extraites du JDataStore employee.
Le bouton Enregistrer du JdbNavToolBar pouvait servir enregistrer les
modifications dans le fichier employee. Dans la section ci-dessous, nous
ajouterons un bouton servant, lui aussi, excuter le code de rsolution
standard. Quand le bouton personnalis ou le bouton Enregistrer de la
barre doutils est choisi, les modifications apportes au QueryDataSet sont
enregistres dans le fichier de donnes employee en utilisant le
QueryResolver par dfaut du QueryDataSet.
8-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d u n Q u e r y D a t a S e t
Ajout dun bouton pour enregistrer des modifications
depuis un QueryDataSet
Les fichiers achevs de lapplication se trouvent dans le rpertoire /
samples/DataExpress/QueryResolver de votre installation JBuilder.
Lapplication en train de sexcuter ressemble ceci :
Figure 8.1 Interface utilisateur pour enregistrer des modifications depuis un QueryDataSet
Pour crer cette application,
1 Crez une application de base de donnes simple, comme dcrit dans
Accs aux donnes des exemples, page 11-2.
Si vous avez dj cr lapplication de base de donnes simple, il vous
suffit de louvrir. Si vous navez pas termin les tapes crant
lapplication, vous pouvez accder aux fichiers du projet complet dans
le rpertoire /samples/DataExpress/QueryProvider de votre installation
JBuilder.
Remarque Vous pouvez gagner du temps en faisant une copie de sauvegarde de
ces fichiers avant de les modifier car dautres exemples de ce manuel
utilisent comme point de dpart lapplication de base de donnes cre
dans Accs aux donnes des exemples, page 11-2.
2 Slectionnez le fichier cadre dans le volet contenu.
3 Ajoutez un composant JButton de la page Swing de la palette des
composants. Dfinissez la proprit text du bouton par le texte
Enregistrer les modifications. Reportez-vous limage de lapplication
acheve au dbut de cet exemple pour avoir une ide de lemplacement
des contrles dans linterface utilisateur.
4 Vrifiez que le bouton JButton est toujours slectionn, puis cliquez
dans longlet Evnements de linspecteur. Slectionnez puis
double-cliquez sur la mthode actionPerformed(). Cela fait passer la
focalisation dans lAppBrowser du concepteur dinterface utilisateur au
volet Source et affiche le squelette de la mthode actionPerformed().
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-5
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d u n Q u e r y D a t a S e t
Ajoutez le code suivant la mthode actionPerformed() :
try {
database1.saveChanges(queryDataSet1);
System.out.println("Modifications enregistres");
}
catch (Exception ex) {
// affiche lexception de JdbStatusLabel
// si lapplication en contient une,
// ou sinon affiche une bote de dialogue derreur
DBExceptionHandler.handleException(ex); }
Si vous avez utilis dautres noms pour les instances des objets, par
exemple database1, remplacez-les en consquence.
5 Excutez lapplication en slectionnant Excuter|Excuter le projet.
Lapplication se compile et affiche une fentre spare. Les donnes
sont affiches dans une table, avec un bouton Enregistrer les
modifications, la barre doutils et un libell barre dtat indiquant la
position de la ligne en cours et le nombre de lignes.
Si des erreurs ont lieu la compilation, un volet apparat indiquant les
lignes de code errones. Dans ce cas, lerreur provient probablement du
code du bouton personnalis, vous devez donc vrifier si le code
ci-dessus a t correctement saisi. Faites les corrections ncessaires et
excutez lapplication.
En excutant lapplication, vous pouvez remarquer les comportements
suivants :
Utilisez le clavier, la souris ou la barre doutils pour faire dfiler les
donnes affiches dans la table. Le libell dtat sactualise en
consquence.
Vous pouvez redimensionner la fentre pour afficher davantage de
champs ou les faire dfiler en utilisant la barre de dfilement
horizontale.
Modifiez les donnes affiches dans la table en insrant, supprimant et
modifiant des donnes. Vous pouvez enregistrer les modifications sur le
serveur en cliquant sur le bouton Enregistrer les modifications que vous
avez cr, ou sur le bouton Enregistrer du composant JdbNavToolBar.
Remarque Comme des contraintes de donnes sont dfinies dans la table employee,
la sauvegarde peut chouer en fonction des modifications effectues.
Comme dautres modifications peuvent entraner des erreurs, ne modifiez
que les valeurs des colonnes FIRST_NAME et LAST_NAME dans les
lignes existantes tant que vous ntes pas plus familier avec les contraintes
dfinies sur cette table.
8-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s p a r u n e p r o c d u r e
Enregistrement des modifications dans la source de donnes par
une procdure stocke
Vous pouvez utiliser diffrentes implmentations de Resolver pour
enregistrer les modifications apportes vos sources de donnes.
QueryDataSets utilise par dfaut un QueryResolver pour enregistrer les
modifications. Le rsolveur par dfaut peut tre remplac en dfinissant la
proprit StorageDataSet.resolver.
Cette section dcrit les fonctions de rsolution de base proposes par
DataExpress pour les composants ProcedureDataSet. Elle dveloppe les
concepts prsents dans Utilisation des procdures stockes, page 6-1,
en explorant les diffrentes mthodes denregistrement des modifications
dans une source de donnes.
Dans cette section, le tutoriel dextraction est tendu en ajoutant un
mcanisme de base de rsolution. Pour un composant ProcedureDataSet
cela peut seffectuer de deux manires. Les sections suivantes dcrivent
ces deux mthodes de manire plus dtailles.
Un bouton activant le code de rsolution de base, ou un JdbNavToolBar
dont le bouton Enregistrer effectue galement lopration de rsolution
de requte de base. Voir Enregistrement des modifications avec un
QueryResolver, page 8-6.
Un ProcedureResolver ncessitant le codage spcifique dune procdure
stocke dans la base de donnes pour laquelle les donnes doivent tre
rsolues. Vous en trouverez un exemple dans Enregistrement des
modifications avec un ProcedureResolver, page 8-8.
Enregistrement des modifications avec un QueryResolver
Si la proprit resolver dun ProcedureDataSet nest pas dfinie, le rsolveur
par dfaut est un QueryResolver qui gnrera des requtes INSERT,
UPDATE et DELETE pour enregistrer les modifications. Le QueryResolver
requiert la dfinition des proprits tableName et rowID. Cette mthode
denregistrement des modifications est illustre dans les exemples
dapplications disponibles en tant que projet fini dans le rpertoire
<jbuilder>/samples/DataExpress/ServerSpecificProcedures/.
Codage de procdures stockes pour grer la rsolution de
donnes
Pour utiliser un ProcedureResolver, vous devez implmenter trois
procdures stockes dans la base de donnes et les spcifier comme
proprits du ProcedureResolver.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-7
C o d a g e d e p r o c d u r e s s t o c k e s p o u r g r e r l a r s o l u t i o n d e d o n n e s
Ces trois procdures sont :
insertProcedure est appele pour chaque ligne insrer dans le DataSet.
Les paramtres utilisables dans un appel dune insertProcedure sont :
La ligne insre telle quelle apparat dans lensemble de donnes.
Le ParameterRow optionnel dans le ProcedureDescriptor.
La procdure stocke doit tre conue pour insrer un enregistrement
dans la, ou les tables appropries en fonction des donnes de cette
ligne. Le ParameterRow peut tre utile pour un tat des sorties ou des
paramtres dentre optionnels.
updateProcedure est appele pour chaque ligne modifie dans le DataSet.
Les paramtres utilisables dans un appel dune updateProcedure sont :
La ligne modifie telle quelle apparat dans lensemble de donnes.
La ligne dorigine telle quelle tait quand les donnes ont t
fournies au DataSet.
Le ParameterRow optionnel dans le ProcedureDescriptor.
La procdure stocke doit tre conue pour actualiser un
enregistrement dans la ou les tables appropries en fonction des
donnes dorigine et des donnes modifies. Comme la ligne dorigine
et la ligne modifie ont les mmes noms de colonne, la syntaxe des
paramtres nomms a t tendue afin dindiquer la ligne de donnes
voulue. Le paramtre nomm :ORIGINAL.CUST_ID indique ainsi le
champ CUST_ID de la ligne des donnes dorigine alors que
:CURRENT.CUST_ID dsigne ce mme champ dans la ligne des
donnes modifies. De mme, un paramtre :parameter.CUST_ID
indique le champ CUST_ID dans un ParameterRow.
deleteProcedure est appele pour chaque ligne supprime du DataSet.
Les paramtres utilisables dans un appel dune deleteProcedure sont :
La ligne dorigine telle quelle tait quand les donnes ont t
fournies au DataSet.
Le ParameterRow optionnel dans le ProcedureDescriptor.
La procdure stocke doit tre conue pour supprimer un
enregistrement dans la ou les tables appropries en fonction des
donnes de cette ligne.
Un exemple de code utilisant cette mthode pour la rsolution de donnes
dans une base de donnes se trouve ci-dessous dans Enregistrement des
modifications avec un ProcedureResolver, page 8-8. Dans le cas
dInterBase, voir galement Exemple : Utilisation de procdures stockes
InterBase avec paramtres de retour, page 8-10.
8-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C o d a g e d e p r o c d u r e s s t o c k e s p o u r g r e r l a r s o l u t i o n d e d o n n e s
Enregistrement des modifications avec un
ProcedureResolver
Lexemple suivant dcrit la manire denregistrer les modifications dans
la base de donnes en utilisant le concepteur dinterface utilisateur
JBuilder, un composant ProcedureDataSet et un composant
ProcedureResolver. Certaines applications exemple utilisant des procdures
stockes sur divers serveurs sont disponibles dans le rpertoire /samples/
DataExpress/ServerSpecificProcedures/.
Le projet en cours contient un composant JdbNavToolBar. En plus de donner
la possibilit de se dplacer dans la table, la barre doutils propose un
bouton Enregistrer. A ce stade, ce bouton utilisera un QueryResolver. Une
fois spcifi un systme de rsolution personnalis via un
ProcedureResolver, le bouton Enregistrer les modifications y appellera les
procdures dinsertion, dactualisation et de suppression.
Arriv ce point de lapplication, vous pouvez excuter lapplication et
visualiser ou parcourir les donnes. Mais pour pouvoir insrer, supprimer
ou modifier les enregistrements, il faut spcifier les informations suivantes
indiquant comment grer ces processus. Le projet ouvert,
1 Slectionnez le fichier cadre dans le volet contenu, puis slectionnez
longlet Conception pour activer le concepteur dinterface utilisateur.
2 Slectionnez un composant ProcedureResolver de longlet Data Express
de la palette des composants du volet contenu. Cliquez dans le volet
contenu pour ajouter le composant lapplication.
3 Affectez la proprit database du ProcedureResolver la base de donnes
instancie, database1, dans linspecteur.
4 Affectez la valeur DELETE_COUNTRY la proprit deleteProcedure,
comme suit :
a Slectionnez procedureResolver1 dans larborescence des composants
et cliquez sur sa proprit deleteProcedure dans linspecteur.
b Double-cliquez sur la valeur de la proprit deleteProcedure afin
dafficher la bote de dialogue DeleteProcedure.
c Affectez la valeur database1 la proprit Database.
d Cliquez sur Parcourir les procdures puis double-cliquez sur la
procdure nomme DELETE_COUNTRY.
Linstruction suivante est crite dans le champ Instruction SQL ou
Escape de procdure stocke :
execute procedure DELETE_COUNTRY :OLD_COUNTRY
e Modifiez cette instruction pour obtenir :
execute procedure DELETE_COUNTRY :COUNTRY
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-9
C o d a g e d e p r o c d u r e s s t o c k e s p o u r g r e r l a r s o l u t i o n d e d o n n e s
Le texte de la procdure peut tre affich avec le pilote de base de
donnes (Outils|Pilote de base de donnes).
Remarque Ne cliquez pas sur Tester la procdure, car cette procdure ne
renvoie aucun rsultat.
5 Affectez la valeur INSERT_COUNTRY la proprit insertProcedure,
comme suit :
a Slectionnez, puis double-cliquez sur la proprit insertProcedure du
ProcedureResolver pour ouvrir la bote de dialogue insertProcedure.
b Affectez la valeur database1 au champ Database.
c Cliquez sur Parcourir les procdures puis double-cliquez dans la
procdure nomme INSERT_COUNTRY.
d Modifiez le code gnr pour obtenir :
execute procedure INSERT_COUNTRY :COUNTRY, :CURRENCY
Remarque Ne cliquez pas sur Tester la procdure, car cette procdure ne
renvoie aucun rsultat.
6 Affectez la valeur UPDATE_COUNTRY la proprit updateProcedure,
comme suit :
a Slectionnez, puis double-cliquez sur la proprit updateProcedure du
ProcedureResolver pour ouvrir la bote de dialogue updateProcedure.
b Affectez la valeur database1 la proprit Database.
c Cliquez sur Parcourir les procdures puis double-cliquez dans la
procdure nomme UPDATE_COUNTRY.
d Modifiez le code gnr pour obtenir :
execute procedure UPDATE_COUNTRY :ORIGINAL.COUNTRY, :CURRENT.COUNTRY,
:CURRENT.CURRENCY
Remarque Ne cliquez pas sur Tester la procdure, car cette procdure ne
renvoie aucun rsultat.
7 Slectionnez procedureDataSet1 dans le volet projet. Affectez la valeur
procedureResolver1 la proprit resolver.
8 Slectionnez procedureDataSet1. Dfinissez sa proprit metaDataUpdate
par Aucun.
9 Choisissez Excuter|Excuter le projet afin dexcuter lapplication.
Quand vous excutez lapplication, vous pouvez parcourir, modifier,
ajouter ou supprimer des donnes dans la table. Enregistrez les
modifications effectues en utilisant le bouton Enregistrer les
modifications de la barre doutils. Toutefois, il nest pas possible dans cet
exemple de supprimer une valeur existante de la colonne COUNTRY en
raison de lintgrit rfrentielle. Pour tester la procdure DELETE,
ajoutez une nouvelle valeur la colonne COUNTRY puis supprimez-la.
8-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R s o l u t i o n d e s d o n n e s d e p l u s i e u r s t a b l e s
Exemple : Utilisation de procdures stockes InterBase
avec paramtres de retour
Une procdure stocke InterBase renvoyant des valeurs est appele
diffremment par les diffrents pilotes. La liste ci-dessous donne la
syntaxe, selon le pilote, de la fonction suivante :
CREATE PROCEDURE fct (x SMALLINT)
RETURNS (y SMALLINT)
AS
BEGIN
y=2*x;
END
Appel de la procdure fct depuis diffrents pilotes :
Visigenic et InterClient version 1.3 ou prcdentes
execute procedure fct ?
Si la procdure est appele via un pilote JDBC pur, la sortie est capture
dans un ensemble de rsultats comportant une seule ligne. JBuilder
autorise la syntaxe suivante pour grer les valeurs en sortie :
execute procedure fct ? returning_values ?
JBuilder capture alors lensemble de rsultats et initialise la valeur du
paramtre spcifi par le second marqueur de paramtre.
InterClient version 1.4 ou suivantes :
{call fct(?,?)}
O les marqueurs de paramtre doivent tre placs aprs les
paramtres dentre.
Rsolution des donnes de plusieurs tables
Il est possible de spcifier une requte portant sur plusieurs tables dans un
QueryDataSet, JBuilder est capable de rsoudre les modifications dun tel
ensemble de donnes. SQLResolver est capable de rsoudre les requtes
SQL faisant rfrence plusieurs tables. La recherche des mtadonnes
dtecte quelle table appartient chaque colonne et suggre un ordre de
rsolution des tables. Les proprits dfinies par la recherche des
mtadonnes sont :
Column - columnName
Column - schemaName
Column - serverColumnName
StorageDataSet - tableName
StorageDataSet - resolveOrder
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-11
R s o l u t i o n d e s d o n n e s d e p l u s i e u r s t a b l e s
La proprit tableName du StorageDataSet nest pas initialise. La proprit
tableName est identifie par colonne.
La proprit resolveOrder est un tableau de chanes qui spcifie lordre de
rsolution dans le cas dune rsolution multitable. Les requtes INSERT et
UPDATE utilisent lordre de ce tableau, les requtes DELETE utilisent
lordre inverse de celui du tableau. Si une table est retire de la liste, les
colonnes de cette table ne sont pas rsolues.
Remarques sur les types de liaisons entre les tables dune
requte
Une requte SQL multitable dfinit gnralement un lien entre des tables
dans la clause WHERE de la requte. Selon la nature du lien et la structure
des tables, il y a quatre types diffrents de lien (en appelant la table
primaire T1 et la table lie T2) :
1:1
Il y a exactement un enregistrement de T2 correspondant un
enregistrement de T1 et inversement. Une base de donnes
relationnelle peut employer cette organisation pour certaines tables soit
dans un souci de clart ou cause dune limitation portant sur le
nombre de colonnes par table.
1:M
Il peut y avoir plusieurs enregistrements de T2 correspondant un
enregistrement T1, mais un seul enregistrement de T1 correspond un
enregistrement de T2. Exemple : chaque client peut avoir pass
plusieurs commandes.
M:1
Il y a un seul enregistrement de T2 qui correspond un enregistrement
de T1, mais plusieurs enregistrements de T1 peuvent correspondre au
mme enregistrement de T2. Exemple : chaque commande peut avoir
un code produit qui est associ un nom de produit dans la table des
produits. Cest un exemple de rfrence exprime directement en SQL.
M:M
Le cas le plus gnral.
JBuilder adopte une approche simplifie pour la rsolution de plusieurs
tables lies : JBuilder ne rsout que des liens de type 1:1. Nanmoins,
comme il est difficile de dtecter le type de lien dcrit par une requte SQL
donne, JBuilder suppose que toutes les requtes multitables sont de
type 1:1.
8-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R s o l u t i o n d e s d o n n e s d e p l u s i e u r s t a b l e s
Si les tables lies ne le sont pas par un lien de type 1:1, la rsolution doit
tre gre de la manire suivante :
1:M
Gnralement, il nest pas intressant de rpliquer les champs matre de
chaque enregistrement dtail de la requte. A la place, crez un
ensemble de donnes dtail spar, ce qui permet une rsolution
correcte des modifications.
M:1
En gnral, ce cas se gre en utilisant le mcanisme des rfrences.
Cependant, si la rfrence est utilise uniquement pour laffichage (sans
modifications de ces champs) elle peut tre gre par une requte
multitable. Spcifiez dans le rowId dau moins une des colonnes de la
table de rfrence quelle ne doit pas tre rsolue.
M:M
Ce type de relation entre tables se produit trs rarement, cest
gnralement le rsultat dune erreur dans les spcifications.
Rfrences (alias) de tables et de colonnes dans une chane
de requte
Une chane de requte peut inclure des rfrences de table ou de colonne
appeles galement alias.
Gnralement, les alias de table ne sutilisent pas dans les requtes
monotables, ils sont frquemment employs dans les requtes
multitables pour simplifier la chane de requte ou pour diffrencier
des tables portant le mme nom mais dtenues par diffrents
utilisateurs.
SELECT A.a1, A.a2, B.a3 FROM Table_Called_A AS A, Table_Called_B AS B
Les rfrences de colonne semploient frquemment pour nommer une
colonne calcule mais galement pour diffrencier des colonnes
provenant de diffrentes tables et portant le mme nom.
SELECT T1.NO AS NUMBER, T2.NO AS NR FROM T1, T2
Si lalias de colonne est spcifi dans la chane de requte, il dfinit la
valeur de la proprit columnName de lobjet Column dans JBuilder. Le nom
physique, tel que dfini dans la table dorigine, est affect la proprit
serverColumnName. Le QueryResolver utilise serverColumnName lors de la
gnration des requtes de rsolution.
Si un alias de table est spcifi dans la chane de requte, il dfinit la
valeur de la proprit tableName dun objet Column. Le nom dorigine
nest pas lui-mme expos par lAPI JBuilder.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-13
U t i l i s a t i o n d e s e n s e m b l e s d e d o n n e s a v e c R M I ( m i s e e n f l u x )
Contrle du paramtrage des proprits de colonne
Les proprits tableName, schemaName et serverColumnName sont initialises par
le QueryProvider pour les composants QueryDataSet sauf si la proprit
metaDataUpdate ninclut pas metaDataUpdate.TABLENAME.
Que faire si une table nest pas modifiable ?
Sil ny a pas de rowId dans une table dune requte, aucune modification
apporte cette table nest enregistre quand la mthode saveChanges() est
appele.
Remarque La possibilit dactualisation dpend dautres facteurs, qui sont dcrits
plus en dtail dans Interrogation dune base de donnes, page 5-2.
Comment spcifier quune table ne doit pas tre
actualise ?
Pour une requte multitable, lun des tables peut tre actualisable quand
lautre ne lest pas. La proprit resolveOrder est un tableau de chanes qui
spcifie lordre de rsolution dans le cas dune rsolution multitable. Les
requtes INSERT et UPDATE utilisent lordre de ce tableau, les requtes
DELETE utilisent lordre inverse de celui du tableau. Si une table est
retire de la liste, les colonnes de cette table ne sont pas rsolues.
Pour une table unique, affectez la proprit metaDataUpdate la valeur
NONE, et ne dfinissez aucune des proprits de rsolution (rowID,
tableName, etc.).
Utilisation des ensembles de donnes avec RMI (mise en flux)
Les flux densembles de donnes permettent de crer un objet Java
(DataSetData) contenant toutes les donnes dun ensemble de donnes. A
linverse, un objet DataSetData peut tre utilis pour dfinir les
informations de colonne et les donnes dun ensemble de donnes.
Les objets DataSetData implmentent linterface java.io.Serializable et
peuvent dont tre srialiss en utilisant writeObject dans
java.io.ObjectOutputStream et lus en utilisant readObject dans
java.io.ObjectInputStream. Cette manire de procder transforme les
donnes en un tableau doctets et les transmet via des sockets ou certains
autres moyens de transport. Il est aussi possible de transmettre lobjet via
RMI Java, ce qui effectuera la srialisation directement.
Au lieu deffectuer lenregistrement de toutes les informations dun
ensemble de donnes, il est possible de nenregistrer que les modifications
8-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e s e n s e m b l e s d e d o n n e s a v e c R M I ( m i s e e n f l u x )
apportes lensemble de donnes. Cette fonctionnalit permet
dimplmenter un serveur de niveau intermdiaire qui communique avec
un gestionnaire de bases de donnes et un client lger qui est capable
dditer un DataSet.
Exemple : Utilisation de flux densembles de donnes
Il peut tre intressant de placer un ensemble de donnes dans un flux
dans le contexte dun systme trois niveaux avec un serveur
dapplication Java qui rpond aux demandes des clients avec les donnes
de certaines sources de donnes. Le serveur peut utiliser des composants
QueryDataSet ou ProcedureDataSet de JBuilder pour fournir les donnes la
machine serveur. Les donnes peuvent tre extraites en utilisant
DataSetData.extractDataSet et envoyes au client. Du ct client, les
donnes peuvent tre charges dans un TableDataSet et modifies avec les
contrles DataSet de JBuilder ou avec des appels de lAPI Java DataSet.
Lapplication serveur peut ensuite retirer toutes les donnes de son
DataSet afin dtre prte rpondre aux demandes dautres applications
client.
Quand lutilisateur de lapplication client veut enregistrer les
modifications, les donnes peuvent tre extraites en utilisant
DataSetData.extractDataSetChanges et envoyes au serveur. Avant de
charger ces modifications, le serveur doit obtenir le type physique des
colonnes du gestionnaire de bases de donnes en utilisant les
mtadonnes de lensemble de donnes. Puis, lensemble de donnes est
charg avec les modifications et le mcanisme de rsolution classique de
JBuilder est appliqu pour rsoudre les donnes dans la source de
donnes.
Sil y a des erreurs de rsolution, elles peuvent ne pas tre dtectes par
des actions de linterface utilisateur mais quand la rsolution est effectue
sur une machine serveur distant. Le mcanisme de rsolution doit grer
les erreurs en crant un ensemble de donnes des erreurs. Chaque
message derreur doit tre marqu par la valeur INTERNALROW de la ligne
dans laquelle lerreur a eu lieu. DataSetData peut transmettre ces erreurs
lapplication client. Si le DataSet est toujours actif, lapplication client peut
aisment joindre les erreurs au DataSet et afficher un texte derreur pour
chaque ligne.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-15
U t i l i s a t i o n d e s e n s e m b l e s d e d o n n e s a v e c R M I ( m i s e e n f l u x )
Utilisation des mthodes de flux densemble de donnes
Les mthodes statiques extractDataSet et extractDataSetChanges remplissent
un DataSetData avec des donnes membre prives permanentes qui
spcifient :
1 Les informations de mtadonnes composes de
columnCount
rowCount
columnNames
dataTypes
rowId, hidden, internalRow (proprits de colonne)
Les proprits sont actuellement stockes dans les trois bits de poids
fort de chaque type de donnes. Chaque type de donnes est cod sur
un octet. La proprit columnCount est stocke implicitement comme
longueur du tableau columnNames.
2 Les bits dtats de chaque ligne. Une valeur short est stocke pour
chaque ligne.
3 Les bits indicateurs de Null pour chaque lment de donnes. 2 bits
sont stocks pour chaque lment de donnes. Les valeurs possibles
sont :
0) Donnes normales
1) Null assign
2) Null non assign
3) Null non modifi
La dernire valeur est utilise exclusivement pour
extractDataSetChanges. Les valeurs non modifies dans la version
UPDATED sont stockes sous la forme de null ce qui conomise de
lespace pour les donnes binaires volumineuses, etc.
4 Les donnes elles-mmes, organises en un tableau des donnes de
colonne. Si une colonne de donnes est de type Variant.INTEGER, un
tableau de int est utilis pour les valeurs de cette colonne.
5 Pour extractDataSetChanges, une colonne spciale, INTERNALROW, est
ajoute la section des donnes. Cette colonne de donnes contient des
valeurs entires longues qui dsignent la ligne interne (internalRow) de
lensemble de donnes dont les donnes sont extraites. Cette colonne de
donnes doit tre utilise pour ltat des erreurs quand les
modifications ne peuvent tre rsolues dans la source de donnes.
La mthode loadDataSet charge les donnes dans un ensemble de donnes.
Toute colonne qui nexiste pas dans lensemble de donnes doit tre
ajoute. Attention, les informations sur le type physique et les proprits
comme sqlType, precision et scale ne sont pas contenues dans lobjet
DataSetData. Ces proprits doivent tre recherches directement dans la
8-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
source de donnes. Cependant, ces proprits ne sont pas ncessaires pour
la modification. La colonne spciale, INTERNALROW saffiche comme
nimporte quelle autre colonne de lensemble de donnes.
Personnalisation de la logique de rsolution par dfaut
JBuilder simplifie lcriture dun mcanisme personnalis de rsolution de
vos donnes quand vous accdez aux donnes dune source de donnes
personnalise comme EJB, les serveurs dapplications, SAP, BAAN, IMS,
OS/390, CICS, VSAM, DB2, etc.
La lecture et lactualisation des donnes dune source de donnes comme
un serveur Oracle ou Sybase sont isoles dans deux principales interfaces :
fournisseurs et rsolveurs. Les fournisseurs extraient les donnes dune
source de donnes et les placent dans un StorageDataSet. Les rsolveurs
crivent en retour les modifications dans la source de donnes. Sparer
nettement lacquisition et la rsolution des donnes en deux interfaces
facilite la cration de nouveaux composants dacquisition/rsolution pour
de nouvelles sources de donnes. JBuilder fournit des implmentations
pour les pilotes JDBC standard qui donnent accs des bases de donnes
courantes comme Oracle, Sybase, Informix, InterBase, DB2, MS SQL
Server, Paradox, dBASE, FoxPro, Access, et dautres bases de donnes
rpandues. Parmi lesquelles :
OracleProcedureProvider
ProcedureProvider
ProcedureResolver
QueryProvider
QueryResolver
Un projet exemple ayant un fournisseur et un rsolveur personnaliss se
trouve dans le rpertoire /samples/DataExpress/CustomProviderResolver de
votre installation de JBuilder. Le fichier exemple TestApp.java est une
application avec cadre contenant un JdbTable et un JdbNavToolBar. Ces deux
composants visuels sont connects un composant TableDataSet dont les
donnes sont fournies par un fournisseur personnalis (dfini dans le
fichier ProviderBean.java), et sont enregistres avec un rsolveur
personnalis (dfini dans le fichier ResolverBean.java). Cette application
exemple lit les donnes et enregistre les modifications dans le fichier texte
data.txt, un fichier simple, non dlimit. La structure de data.txt est
dcrite dans le fichier interface DataLayout.java.
Un exemple dcrivant lcriture dun ProcedureResolver personnalis se
trouve dans Enregistrement des modifications avec un
ProcedureResolver, page 8-8.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-17
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
Explication de la rsolution par dfaut
Si vous navez pas explicitement instanci de composant QueryResolver
quand des modifications sont rsolues dans la source de donnes, la
logique de rsolution par dfaut cre un composant QueryResolver par
dfaut. Cette section dcrit lutilisation dun QueryResolver pour
personnaliser le processus de rsolution.
Le QueryResolver est un composant DataExpress qui implmente linterface
SQLResolver. Cette interface SQLResolver est utilise par le ResolutionManager
durant le processus de rsolution des modifications dans la base de
donnes. Comme son nom limplique, la classe ResolutionManager gre la
phase de rsolution.
Chaque StorageDataSet dispose dune proprit resolver. Si cette proprit
na pas t initialise lors de lappel de la mthode Database.saveChanges(),
elle cre un composant QueryResolver par dfaut et tente denregistrer les
modifications dun DataSet particulier.
Ajout dun composant QueryResolver
Pour ajouter un composant QueryResolver une application en utilisant les
outils de conception visuelle de JBuilder, procdez de la manire
suivante :
1 Ouvrez un projet existant auquel vous voulez ajouter une logique
personnalise de rsolution.
Le projet devrait inclure un objet Database et un objet QueryDataSet. Pour
savoir comment faire, voir Interrogation dune base de donnes,
page 5-2.
2 Slectionnez le fichier cadre dans le volet contenu, puis slectionnez
longlet Conception pour afficher le concepteur dinterface utilisateur.
3 Cliquez sur le composant QueryResolver de la page DataExpress de la
palette de composants.
4 Cliquez nimporte o dans le concepteur dinterface utilisateur ou dans
larborescence des composants pour lajouter lapplication.
Le concepteur dinterface utilisateur gnre du code source qui cre un
objet QueryResolver par dfaut.
5 Associez le composant QueryResolver au DataSet.
Pour ce faire, utilisez linspecteur pour dfinir la proprit resolver du
StorageDataSet, par exemple queryDataSet1, par la valeur QueryResolver
approprie, qui est queryResolver1 par dfaut.
Le mme QueryResolver peut tre connect plusieurs ensembles de
donnes sils partagent la mme gestion des vnements. Si chaque
8-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
ensemble de donnes ncessite une gestion personnalise des vnements,
crez un composant QueryResolver distinct pour chaque StorageDataSet.
Interception des vnements de rsolution
Le processus de rsolution est contrl en interceptant les vnements du
Resolver. Quand lobjet QueryResolver est slectionn dans le volet contenu,
la page Evnements de linspecteur affiche ses vnements. Trois groupes
dvnements (dfinis dans linterface ResolverListener) peuvent tre
contrls :
Notification dune action qui va tre effectue. Toutes les erreurs seront
traites comme exceptions normales, et non comme des vnements
erreur.
deletingRow()
insertingRow()
updatingRow()
Notification dune action qui a t effectue.
deletedRow()
insertedRow()
updatedRow()
Erreurs conditionnelles ayant eu lieu. Ce sont des erreurs internes, et
non des erreurs serveur.
deleteError()
insertError()
updateError()
Quand le gestionnaire de rsolution va effectuer une action suppression,
insertion ou modification, lvnement de notification correspondant du
premier groupe dvnements (deletingRow, insertingRow ou updatingRow) est
gnr. Lun des paramtres transmis avec la notification ces
vnements est un objet ResolverResponse. Cest au gestionnaire
dvnements (appel galement auditeur dvnements) de dterminer si
laction est approprie et de renvoyer lune des rponses (ResolverResponse)
suivantes :
resolve() indique au gestionnaire de rsolution de poursuivre la
rsolution de cette ligne.
skip() indique au gestionnaire de rsolution de sauter cette ligne et de
poursuivre.
abort() indique au gestionnaire de rsolution darrter la rsolution.
Si la rponse de lvnement est resolve() (rponse par dfaut), un
vnement appropri du deuxime groupe (deletedRow, insertedRow ou
updatedRow) est gnr. Aucune rponse nest attendue de ces vnements.
Ils nexistent que pour informer lapplication que laction a t effectue.
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-19
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
Si la rponse de lvnement est skip(), la ligne en cours nest pas rsolue
et le processus de rsolution se poursuit avec la ligne de donnes suivante.
Si lvnement termine le processus de rsolution, la mthodeinserting est
appele, qui son tour appelle response.abort(). Aucun vnement
derreur nest gnr car les vnements erreur sont dclenchs pour
rpondre aux erreurs internes. Cependant une exception gnrique
ResolutionException est dclenche pour annuler le processus de
rsolution.
Quand une erreur se produit pendant le processus de rsolution, si par
exemple, le serveur nautorise pas la suppression dune ligne, lvnement
derreur appropri (deleteError, insertError ou updateError) est gnr. Les
paramtres suivants sont transmis lvnement :
Le DataSet original impliqu dans la rsolution
Un DataSet temporaire filtr pour nafficher que les lignes concernes
LException qui a eu lieu
Un objet ErrorResponse
Cest au gestionnaire dvnements :
dexaminer lException ;
de dterminer quoi faire ;
de communiquer cette dcision au gestionnaire de rsolution. Cette
dcision est transmise en utilisant lune des rponses ErrorResponse
suivantes :
abort() indique au gestionnaire de rsolution darrter toutes les
rsolutions
retry() indique au gestionnaire de rsolution dessayer de
recommencer la dernire opration
ignore() indique au gestionnaire de rsolution de ne pas tenir
compte de lerreur et de poursuivre
Si le gestionnaire dvnements dclenche une exception DataSetException,
elle est traite comme lappel de ResolverResponse.abort(). De plus, elle
dclenche lvnement erreur en transmettant le paramtre Exception
utilisateur.
Utilisation des vnements de rsolution
Pour un exemple de gestion des vnements de rsolution, voir le projet
ResolverEvents.jpx et les fichiers associs dans le rpertoire /samples/
DataExpress/ResolverEvents de votre installation JBuilder. Dans
lapplication ResolverEvents,
8-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
Une table est lie la table Customer de la base de donnes exemple
JDataStore.
Le bouton Enregistrer les modifications cre un objet QueryResolver
personnalis qui prend le contrle du processus de rsolution.
Quand lapplication est excute, vous pourrez constater les
comportements suivants :
La suppression de ligne est interdite. Toute tentative de suppression de
ligne est systmatiquement bloque. Cela illustre lutilisation de
lvnement deletingRow.
Linsertion de ligne est autorise uniquement si le client est situ aux
Etats-Unis. Si le client en cours nest pas situ aux Etats-Unis, le
processus est interrompu. Cela illustre lutilisation de lvnement
insertingRow avec une rponse ResolverResponse de abort().
La mise jour des lignes est effectue en ajoutant lancienne et la
nouvelle valeur du nom du client un contrle ListControl. Cela
illustre, pendant le processus de rsolution, laccs simultan aux
nouvelles valeurs, ainsi quaux anciennes donnes.
Ecriture dun rsolveur de donnes personnalis
Cette rubrique traite des rsolveurs de donnes personnaliss et explique
comment ils peuvent tre utiliss comme rsolveurs dun TableDataSet et
de tout DataSet driv de TableDataSet. La mthode principale
implmenter est resolveData(). Cette mthode collecte les modifications
dans un StorageDataSet et rsout ces modifications en retour vers la source
des donnes.
Afin de rsoudre les modifications de donnes vers la source des donnes,
1 Vrifiez que le StorageDataSet est bloqu pour des modifications dans le
fournisseur pendant la phase de rsolution. Cela est fait par lappel des
mthodes :
ProviderHelp.startResolution(dataSet, true);
ProviderHelp.endResolution(dataSet);
Important Placez tout ce qui suit entre ces deux appels de mthodes.
2 Localisez les modifications de donnes en crant un DataSetView pour
chacune des lignes insres, supprimes et mises jour. Pour ce faire,
utilisez les appels de mthodes suivants :
StorageDataSet.getInsertedRows(DataSetView);
StorageDataSet.getDeletedRows(DataSetView);
StorageDataSet.getUpdatedRows(DataSetView);
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s l a s o u r c e d e d o n n e s 8-21
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
Il est important de noter que :
Les lignes insres peuvent contenir des lignes supprimes (qui ne
doivent pas tre rsolues).
Les lignes supprimes peuvent contenir des lignes insres (qui ne
doivent pas tre rsolues).
Les lignes mises jour peuvent contenir des lignes supprimes et des
lignes insres (qui ne doivent pas tre gres comme des mises
jour).
3 Fermez chaque DataSetView aprs la rsolution des donnes ou aprs le
dclenchement dune exception pendant la rsolution. Si les
composants DataSetView ne sont pas ferms, le StorageDataSet garde des
rfrences vers lui et la vue ne fera jamais partie de la collecte des
donnes primes (garbage collection).
Gestion des erreurs de rsolution
Les erreurs peuvent tre gres de nombreuses manires, mais il faut
indiquer au DataSet de changer ltat des lignes modifies. Pour ce faire,
1 Changez chaque ligne pour quelle soit marque
RowStatus.PENDING_RESOLVED:.
Le code qui permet de marquer ainsi la ligne en cours est :
DataSet.markPendingStatus(true);
Appelez cette mthode pour chaque ligne insre, supprime ou mise
jour rsoudre.
2 Appelez une ou plusieurs des mthodes suivantes pour rinitialiser le
bit RowStatus.PENDING_RESOLVED.
La mthode appeler dpend du type de gestion derreur :
markPendingStatus(false);
La mthode markPendingStatus rinitialise la ligne en cours.
resetPendingStatus(boolean resolved);
La mthode resetPendingStatus rinitialise toutes les lignes du
DataSet.
resetPendingStatus(long internalRow, boolean resolved);
La mthode resetPendingStatus rinitialise la ligne dont
lidentificateur internalRow est spcifi.
3 Redfinissez le paramtre resolved par true, en utilisant une des
mthodes resetPendingStatus, pour les lignes dont les modifications ont
t rellement effectues dans la source des donnes.
8-22 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P e r s o n n a l i s a t i o n d e l a l o g i q u e d e r s o l u t i o n p a r d f a u t
Quand le bit PENDING_RESOLVED est rinitialis, les lignes gardent
ltat de modifications enregistres. Elles doivent tre rinitialises et
rsolues pour que :
Les lignes INSERTED & UPDATED passent ltat LOADED.
Les lignes DELETED soient supprimes du DataSet.
Les modifications de lignes qui nont pas t effectues effaceront le bit
PENDING_RESOLVED, mais les modifications resteront encore
enregistres dans le DataSet.
Certains rsolveurs choisiront dabandonner toutes les modifications la
moindre erreur. En fait, cest le comportement par dfaut du QueryDataSet.
Dautres rsolveurs choisiront de valider certaines modifications et de
traiter les modifications en chec par des messages derreur.
Rsolution des relations matre-dtail
La rsolution des relations matre-dtail ncessite certaines
considrations. Si la source des donnes possde des rgles dintgrit
rfrentielle, les composants DataSet peuvent devoir tre rsolus dans un
certain ordre. Lorsque vous utilisez JDBC, JBuilder fournit la classe
SQLResolutionManager. Cette classe garantit dune part que lensemble de
donnes matre rsout ses lignes insres avant de permettre un
ensemble de donnes dtail de rsoudre ses lignes insres et dautre part
que les ensembles de donnes dtail rsolvent leurs lignes supprimes
avant que lensemble de donnes matre ne rsolve les siennes. Pour plus
dinformations sur la rsolution des relations matre-dtail, voir
Enregistrement des modifications dans une relation matre-dtail,
page 9-12.
E t a b l i s s e m e n t d u n e r e l a t i o n ma t r e - d t a i l 9-1
C h a p i t r e
9
Chapitre9Etablissement dune relation
matre-dtail
Les bases de donnes bien conues comportent plusieurs tables. Le but de
la conception de table est de stocker toutes les informations ncessaires
dune manire accessible et efficace. Il est donc ncessaire de dcomposer
une base de donnes en tables identifiant des entits distinctes (comme
des personnes, des lieux ou des objets) et des activits (comme des
vnements ou des transactions) importantes dans lapplication. Pour
mieux dfinir les tables, il est ncessaire didentifier et de comprendre
comment ces entits sont relies entre elles. La cration de plusieurs
petites tables relies rduit la quantit de donnes redondantes, ce qui
limite les possibilits derreur et simplifie lactualisation des donnes.
Dans JBuilder, il est possible de joindre, ou de relier, deux ou plusieurs
ensembles de donnes ayant au moins un champ en commun en utilisant
un MasterLinkDescriptor. Habituellement, une relation matre/dtail est
une relation un--plusieurs entre des ensembles de donnes. Vous
pouvez, par exemple, avoir un ensemble de donnes des clients et un
ensemble de donnes des commandes passes par eux, le numro de
client constituant le champ commun aux deux ensembles de donnes.
Vous pouvez crer une relation matre-dtail qui permet de parcourir
lensemble de donnes des clients et de nafficher pour lensemble de
donnes dtail que les commandes passes par le client en cours.
Vous pouvez lier un ensemble de donnes matre plusieurs ensembles
de donnes dtail, en tablissant le lien sur le mme champ ou sur des
champs diffrents. Vous pouvez aussi crer une relation matre/dtail qui
se dveloppe en cascade en une relation un--plusieurs--plusieurs. Les
relations plusieurs--un ou un--un peuvent tre gres dans un contexte
matre/dtail, mais ces types de relations sont de prfrence pris en
compte par lutilisation de champs de rfrence, afin de voir toutes les
9-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
D f i n i t i o n d u n e r e l a t i o n m a t r e - d t a i l
donnes comme faisant partie dun ensemble de donnes unique. Pour
davantage dinformations sur lenregistrement des modifications
apportes aux donnes de plusieurs ensembles de donnes, voir la section
Rsolution des donnes de plusieurs tables, page 8-10.
Les ensembles de donnes matre et dtail nont pas besoin dtre des
ensembles de donnes de mme type. Par exemple, il est possible
dutiliser un QueryDataSet comme ensemble de donnes matre et un
TableDataSet comme ensemble de donnes dtail. QueryDataSet, TableDataSet
et DataSetView peuvent sutiliser indiffremment comme ensembles de
donnes matre ou dtail.
Cette section traite les sujets suivants :
Dfinition dune relation matre-dtail
Lecture des dtails
Modification des donnes dans les ensembles de donnes
matre-dtail
Etapes de la cration dune relation matre-dtail
Enregistrement des modifications dans une relation matre-dtail
Dfinition dune relation matre-dtail
Lors de la dfinition dune relation matre-dtail, il faut relier des colonnes
de mme type de donnes. Si, par exemple, les donnes de lensemble
matre sont de type INT, les donnes de lensemble dtail doivent
galement tre de type INT. Si les donnes de lensemble de donnes
dtail sont de type LONG, les correspondances ne sont pas trouves ou
des correspondances incorrectes sont tablies. Le nom des colonnes peut
tre diffrent. La relation nest pas limite aux colonnes ayant des index
dans le serveur.
Les informations de lensemble de donnes matre peuvent tre tries sans
restriction. La relation entre les ensembles de donnes matre et dtail
utilise, comme les vues tries, un index maintenu. Cela implique que
lensemble de donnes dtail est toujours tri avec les colonnes de liaison,
ct dtail, comme colonnes de gauche du tri. Dventuels critres de tri
complmentaires doivent tre compatibles avec les colonnes de liaison du
dtail. Pour tre compatible, le descripteur de tri ne doit inclure aucune
des colonnes de liaison du dtail, ou si cest le cas elles doivent tre
spcifies dans le mme ordre dans les colonnes de liaison du dtail et
dans le descripteur de tri. Si lune des colonnes de liaison est incluse dans
le descripteur de tri, elles doivent ltre toutes.
Il est possible de filtrer les donnes dans lensemble matre, dans
lensemble dtail ou dans les deux. Une relation matre-dtail ressemble
dj en elle-mme un filtre appliqu lensemble de donnes dtail,
E t a b l i s s e m e n t d u n e r e l a t i o n ma t r e - d t a i l 9-3
D f i n i t i o n d u n e r e l a t i o n m a t r e - d t a i l
cependant un filtre peut tre ajout, en plus de la relation matre-dtail,
sur lun ou lautre des ensembles de donnes.
Pour crer une relation matre-dtail vous pouvez utiliser, la place dun
MasterLinkDescriptor, une instruction SQL JOIN. Une instruction SQL JOIN
est un oprateur relationnel qui produit une seule table partir de deux
tables en se fondant sur la comparaison des valeurs de certaines colonnes
(colonnes de jointure) dans chacun des ensembles de donnes. Le rsultat
constitue un seul ensemble de donnes contenant les lignes formes par la
concatnation des lignes des deux ensembles de donnes quand les
valeurs des colonnes de jointure correspondent. Pour actualiser des
requtes JOIN avec JBuilder, voir Rsolution des donnes de plusieurs
tables, page 8-10.
Cration dune application avec une relation matre-dtail
Cet exemple dcrit comment crer une relation matre-dtail en utilisant
les fichiers fournis avec JBuilder. Lapplication exemple suppose la
cration de deux requtes, lune slectionnant tous les pays sans doublons
de la table COUNTRY dans la base de donnes exemple employee et
lautre slectionnant tous les employs. Cet exemple est disponible sous la
forme du projet achev dans le rpertoire /samples/DataExpress/
MasterDetail de votre installation JBuilder.
Lensemble de donnes COUNTRY est lensemble de donnes matre, la
colonne COUNTRY constituant le champ de liaison avec EMPLOYEE,
lensemble de donnes dtail. Ces deux ensembles de donnes sont
associs des JdbTables, ainsi quand lutilisateur parcourt la table
COUNTRY, la table EMPLOYEE affiche tous les employs vivant dans le
pays dsign par lenregistrement en cours.
Pour crer cette application,
1 Fermez tous les projets ouverts (Fichier|Fermer).
2 Choisissez Fichier|Nouveau et double-cliquez sur licne Application
pour crer une nouvelle application.
Acceptez toutes les valeurs par dfaut.
3 Slectionnez longlet Conception du volet contenu.
4 Slectionnez un composant Database dans la page DataExpress de la
palette de composants, puis cliquez dans larborescence des
composants ou dans le concepteur dinterface utilisateur pour ajouter le
composant votre application.
5 Ouvrez la proprit connection du composant Database dans
linspecteur, et dfinissez les proprits de la manire suivante en
supposant que votre systme est configur pour utiliser lexemple
9-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
D f i n i t i o n d u n e r e l a t i o n m a t r e - d t a i l
JDataStore comme dcrit dans Configuration de JDataStore,
page 4-7 :
La bote de dialogue connection contient un bouton Tester la connexion.
Cliquez sur ce bouton pour vrifier que les proprits de connexion
sont correctement dfinies. Les rsultats de la tentative de connexion
saffichent ct du bouton. Quand la connexion russit, cliquez
sur OK.
Remarque La bibliothque JDataStore Server est ajoute votre projet lorsque
vous vous connectez une base de donnes JDataStore.
Le code gnr par le concepteur pour cette tape peut tre affich en
slectionnant longlet Source et en recherchant le code de
ConnectionDescriptor. Cliquez sur longlet Conception pour continuer.
6 Slectionnez un composant QueryDataSet de la page DataExpress, puis
cliquez dans larborescence des composants pour ajouter le composant
votre application.
Ce composant dfinit la requte pour lensemble de donnes matre.
Slectionnez la proprit query du composant QueryDataSet dans
linspecteur, puis effectuez le paramtrage suivant :
7 Cliquez sur Tester la requte pour vous assurer que la requte est
excutable et, lorsque la zone dtat indique Succs, cliquez sur OK pour
fermer la bote de dialogue.
8 Ajoutez un autre composant QueryDataSet votre application,
slectionnez sa proprit query dans linspecteur, cliquez sur les points
de suspension (...) pour ouvrir le dialogue Query et dfinissez les
proprits suivantes :
Nom de la proprit Valeur
Pilote com.borland.datastore.jdbc.DataStoreDriver
URL Naviguez jusqu votre copie locale de <jbuilder>/samples/
JDataStore/datastores/employee.jds
Nom dutilisateur Entrez votre nom
Mot de passe non obligatoire
Nom de la proprit Valeur
Base de donnes database1
Instruction SQL SELECT * FROM COUNTRY
Nom de la proprit Valeur
Base de donnes database1
Instruction SQL SELECT * FROM EMPLOYEE
E t a b l i s s e m e n t d u n e r e l a t i o n ma t r e - d t a i l 9-5
D f i n i t i o n d u n e r e l a t i o n m a t r e - d t a i l
Cela permet de dfinir la requte pour lensemble de donnes dtail.
9 Cliquez sur Tester la requte pour vous assurer que la requte est
excutable et, lorsque la zone dtat indique Succs, cliquez sur OK pour
fermer la bote de dialogue.
10 Slectionnez sur la proprit masterLink de lensemble de donnes dtail
(queryDataSet2) dans linspecteur, cliquez sur le bouton points de
suspension (...) pour ouvrir le dialogue MasterLink et dfinissez les
proprits suivantes :
a La proprit DataSet matre propose un menu droulant des
ensembles de donnes disponibles. Choisissez lensemble de
donnes contenant les enregistrements matre pour lensemble de
donnes dtail en cours, cest--dire queryDataSet1.
b Les champs de liaison dcrivent les champs utiliser pour
dterminer les donnes se correspondant dans les composants
ensemble de donnes matre et dtail. Pour slectionner une colonne
dans lensemble de donnes matre relier avec une colonne de
lensemble de donnes dtail : slectionnez les noms de colonne,
dans cet exemple COUNTRY (un champ chane), dans la liste
Colonnes matre disponibles puis cliquez sur le bouton Ajouter aux
liens matre. La colonne saffiche dans la bote Colonnes de lien
matre.
c Pour slectionner la colonne de lensemble de donnes dtail relier
avec une colonne de lensemble de donnes matre, slectionnez le
nom de la colonne, dans cet exemple JOB_COUNTRY (un champ
chane), dans la liste Colonnes dtail disponibles puis cliquez sur le
bouton Ajouter aux liens dtail. La colonne saffiche dans la bote
Colonnes lies dtail.
d Loption Retarder la lecture des enregistrements dtail jusqu ce
que cela soit ncessaire dtermine si les enregistrements de
lensemble de donnes dtail sont tous lus en une seule fois ou ne
sils ne sont lus, pour un enregistrement matre donn, que lorsque
celui-ci est activ. Ne cochez pas cette case pour affecter la
proprit fetchAsNeeded la valeur false. Pour davantage
dinformations sur la lecture, voir Lecture des dtails, page 9-7.
e Cliquez sur Tester le lien.
9-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
D f i n i t i o n d u n e r e l a t i o n m a t r e - d t a i l
Le dialogue doit ressembler ceci si le test russit.
f Cliquez sur OK pour fermer la bote de dialogue MasterLink.
11 Ajoutez votre application un composant DBDisposeMonitor de la page
dbSwing supplmentaires.
Le DBDisposeMonitor fermera le JDataStore lorsque la fentre sera ferme.
12 Dfinissez la proprit dataAwareComponentContainer du DBDisposeMonitor
par this.
Pour crer une interface utilisateur pour cette application,
1 Slectionnez contentPane (BorderLayout) dans larborescence des
composants et dfinissez sa proprit layout par null.
2 Cliquez sur un composant JdbNavToolBar dans longlet dbSwing.
Dposez-le dans la zone juste au-dessus du panneau dans le concepteur
dinterface utilisateur.
JdbNavToolBar sattache automatiquement au DataSet qui dtient la
focalisation.
3 Ajoutez un JdbStatusLabel et placez-le dans la partie infrieure du
panneau, dans le concepteur dinterface utilisateur.
JdbStatusLabel sattache automatiquement au DataSet qui dtient la
focalisation.
4 Slectionnez un composantTableScrollPane de la page dbSwing, puis
cliquez et faites glisser le contour du volet dans la partie suprieure du
concepteur dinterface utilisateur pour lajouter lapplication juste
en-dessous de jdbNavToolBar1.
E t a b l i s s e m e n t d u n e r e l a t i o n ma t r e - d t a i l 9-7
L e c t u r e d e s d t a i l s
Le comportement de dfilement nest propos par dfaut dans aucun
composant Swing ni dans leur extension dbSwing, il faut donc pour en
disposer, ajouter un composant Swing ou dbSwing dfilable un
JScrollPane ou un TableScrollPane. Le composant TableScrollPane offre
des possibilits spcifiques au JdbTable que noffre pas le JScrollPane.
Voir la documentation dbSwing pour plus dinformations.
5 Placez un JdbTable au centre du tableScrollPane1 dans le concepteur
dinterface utilisateur et dfinissez sa proprit dataSet par
queryDataSet1.
6 Ajoutez un autre TableScrollPane la partie infrieure du volet, dans le
concepteur dinterface utilisateur.
Il devient tableScrollPane2.
7 Placez un JdbTable dans tableScrollPane2 et donnez sa proprit
dataSet la valeur queryDataSet2.
8 Compilez et excutez lapplication en choisissant Excuter|Excuter le
projet.
Vous pouvez maintenant parcourir les enregistrements matre
(COUNTRY) et voir les enregistrements dtail (EMPLOYEE) changer pour
nafficher que les employs du pays en cours.
Lapplication en train de sexcuter ressemble ceci :
Lecture des dtails
Dans une relation matre-dtail, la valeur des champs matre dtermine les
enregistrements de dtail qui sont affichs. Tous les enregistrements de
lensemble de donnes dtail peuvent tre lus en une seule fois ou pour un
enregistrement matre donn (quand lenregistrement matre est
parcouru).
9-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
L e c t u r e d e s d t a i l s
Lecture de tous les dtails en une seule fois
Quand le paramtre fetchAsNeeded a la valeur false (ou si loption
Retarder la lecture des enregistrements dtail jusqu ce que cela soit
ncessaire nest pas coche dans la bote de dialogue du
masterLinkDescriptor), toutes les donnes du dtail sont lues en une seule
fois. Utilisez ce paramtrage quand lensemble de donnes dtail nest pas
trop volumineux. Quand cette option est utilise, un instantan des
donnes est affich, ce qui donne la vue la plus cohrente des donnes.
Lorsque la mthode refresh() est appele, tous les ensembles dtail sont
rafrachis en une seule fois.
Par exemple, initialement, lensemble de donnes est rempli par toutes les
donnes de lensemble de donnes dtail. Quand la valeur false est
affecte loption fetchAsNeeded, vous pouvez instancier un composant
DataSetView, lutiliser pour visualiser lensemble de donnes dtail et
vrifier que tous les enregistrements de lensemble de donnes dtail sont
prsents mais filtrs en utilisant les informations de lensemble de
donnes matre.
Lecture des enregistrements dtail slectionns la
demande
Quand le paramtre fetchAsNeeded a la valeur true (ou si loption Retarder
la lecture des enregistrements dtail jusqu ce que cela soit ncessaire est
coche dans la bote de dialogue masterLinkDescriptor), les enregistrements
de dtail sont lus la demande et stocks dans lensemble de donnes
dtail. Ce type de relation matre-dtail fonctionne vraiment comme une
requte paramtre o la valeur des champs matre dtermine les
enregistrements du dtail qui sont affichs. Cette option doit tre utilise
pour amliorer les performances si la table de la base de donnes distante
est volumineuse : les donnes de lensemble de donnes dtail ne sont pas
toutes places en mmoire, elles sont lues la demande. Vous pouvez
galement choisir cette option si vous ntes pas intress par la plupart
des donnes du dtail. Les donnes ainsi lues sont plus rcentes mais ne
sont pas aussi cohrentes que linstantan des donnes obtenu quand le
paramtre fetchAsNeeded a la valeur false. En effet, un moment donn, un
ensemble denregistrements est lu et mis en mmoire cache, puis un autre
ensemble denregistrements dtail est lu et plac en mmoire. Or, entre
temps, le premier ensemble denregistrements dtail peut avoir t
modifi dans la base de donnes distante, mais lutilisateur ne peut voir
ces modifications tant que vous navez pas relu le dtail. Lorsque la
mthode refresh() est appele, seul les ensembles dtail en cours sont
rafrachis.
Supposons, par exemple, que lensemble de donnes dtail soit
initialement vide. Quand vous accdez un enregistrement matre, par
E t a b l i s s e m e n t d u n e r e l a t i o n ma t r e - d t a i l 9-9
M o d i f i c a t i o n d e s d o n n e s d a n s l e s e n s e m b l e s d e d o n n e s m a t r e - d t a i l
exemple Jones, tous les enregistrements du dtail pour Jones sont lus.
Puis, quand vous accdez un autre enregistrement matre, par exemple
Cohen, tous les enregistrements du dtail pour Cohen sont lus et ajouts
lensemble de donnes dtail. Si vous instanciez un composant DataSetView
pour visualiser lensemble de donnes dtail, tous les enregistrements de
Jones et Cohen sont dans lensemble de donnes dtail mais aucun des
enregistrements correspondant aux autres noms.
Quand la proprit fetchAsNeeded a la valeur true, la requte portant sur
lensemble de donnes doit contenir une clause WHERE dfinissant la
relation des colonnes de dtail avec un paramtre reprsentant la valeur
dune colonne dans lensemble de donnes matre. Si la requte
paramtre contient des marqueurs de paramtres nomms, les noms
doivent correspondre un nom de lensemble de donnes matre. If ? Si
des marqueurs JDBC sont utiliss, les colonnes de liaison du dtail sont
lies aux marqueurs de paramtres de gauche droite comme dfini dans
la proprit masterLink. La liaison des valeurs de paramtre est implicite
quand le matre arrive sur une ligne pour la premire fois. La requte est
re-excute pour lire chaque nouveau groupe de dtail. Sil ny a pas de
clause WHERE, JBuilder dclenche une exception
DataSetException.NO_WHERE_CLAUSE. Quand la lecture est gre de cette
manire, sil ny a pas de transaction explicite active, les groupes de dtail
sont lus dans des transactions distinctes. Pour davantage dinformations
sur les relations matre-dtail avec des requtes paramtres, voir
Requtes paramtres dans les relations matre-dtail, page 5-22.
Si lensemble de donnes matre a plusieurs ensembles de donnes dtail
associs dont la proprit fetchAsNeeded a la valeur true, les dtails
conservent la trace des groupes dtail dj lus via une requte ou une
procdure paramtres par les colonnes de liaison du matre actif. Cette
mmorisation peut tre annule en appelant la mthode
StorageDataSet.empty(). Il ny a pas de mmorisation pour les proprits
masterLink pour lesquelles fetchAsNeeded a la valeur true.
Quand lensemble de donnes dtail est un TableDataSet, le paramtre
fetchAsNeeded nest pas pris en compte et toutes les donnes sont lues en
une seule fois.
Modification des donnes dans les ensembles de donnes
matre-dtail
Par dfaut, il nest pas possible de supprimer ou de modifier une valeur
dans une colonne de liaison du matre (une colonne lie lensemble de
donnes dtail) si lenregistrement matre a des enregistrements dtail
associs. Par dfaut, les colonnes de liaison du dtail ne sont pas affiches
dans un composant dinterface utilisateur JdbTable, puisquelles
contiennent les mmes valeurs que les colonnes de liaison du matre qui
9-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e s d e l a c r a t i o n d u n e r e l a t i o n m a t r e - d t a i l
sont, elles, affiches. Quand une nouvelle ligne est insre dans lensemble
de donnes dtail, JBuilder insre les valeurs dans les champs non
affichs.
Avec les proprits cascadeUpdates et cascadeDeletes des relations
matre-dtail, vous pouvez autoriser la mise jour de lignes dun DataSet
dtail partir des mises jour de colonnes dans le DataSet matre, ainsi
que la suppression de lignes dun DataSet dtail lorsque les lignes
correspondantes sont supprimes dans le DataSet matre. Ces proprits
peuvent tre dfinies dans lditeur de proprits MasterLink, dans les
cases cocher Autoriser les mises jour en cascade et Autoriser les
suppressions en cascade.
Lorsque vous utilisez les options cascadeUpdates et cascadeDeletes pour des
relations matre-dtail, soyez particulirement attentif, en particulier
lorsque ces dernires sont chanes, par exemple lorsquun DataSet du
dtail est un matre pour un autre dtail, et ainsi de suite. En effet, si vous
utilisez ces options, une ligne de lensemble de donnes dtail peut tre
mise jour ou supprime alors que les autres ne le sont pas. Par exemple,
un gestionnaire de lvnement deleting() dun editListener peut autoriser
la suppression de quelques lignes dtail et la suppression dautres par
bloc. Dans le cas des mises jour en cascade, vous risquez de vous
retrouver avec des lments dtail orphelins si certaines lignes dun
ensemble dtail ont t mises jour et dautres non. Pour davantage
dinformations sur les options cascadeUpdates et cascadeDelete, voir la
rubrique MasterLinkDescriptor dans la Rfrence de la bibliothque de
composants DataExpress.
Etapes de la cration dune relation matre-dtail
Pour crer une relation matre-dtail entres deux composants ensemble de
donnes, lun reprsentant lensemble de donnes matre et lautre
lensemble de donnes dtail, vous devez passer par les tapes suivantes :
1 Crez ou ouvrez une application avec au moins deux composants
ensemble de donnes, lun reprsentant lensemble de donnes matre
et lautre lensemble de donnes dtail.
Vous pouvez utiliser lexemple dapplication Matre-dtail du projet
MasterDetail.jpx situ dans le rpertoire <jbuilder>/samples/DataExpress/
MasterDetail.
2 Slectionnez le fichier cadre dans le volet contenu. Slectionnez longlet
Conception pour activer le concepteur dinterface utilisateur.
3 Slectionnez lensemble de donnes dtail dans larborescence des
composants, puis sa proprit masterLink dans la page Proprits de
linspecteur. Dans lditeur de proprit masterLink, spcifiez les
proprits suivantes de lensemble de donnes dtail :
E t a b l i s s e me n t d u n e r e l a t i o n m a t r e - d t a i l 9-11
E t a p e s d e l a c r a t i o n d u n e r e l a t i o n m a t r e - d t a i l
La proprit Dataset matre propose un choix des ensembles de
donnes disponibles. Choisissez lensemble de donnes contenant
les enregistrements matre de lensemble de donnes dtail en cours.
Les colonnes de liaison dcrivent quelles sont les colonnes utiliser
pour dterminer la correspondance des donnes entre les
composants ensemble de donnes matre et dtail. Pour slectionner
une colonne de lensemble de donnes matre relier avec une
colonne de lensemble de donnes dtail, double-cliquez sur un nom
de colonne dans la liste Colonnes matre disponibles. Cette colonne est
alors affiche dans la proprit Colonnes lies matre.
Pour slectionner la colonne de lensemble de donnes dtail relier
une colonne de lensemble de donnes matre, double-cliquez sur
le nom de la colonne dans la liste Colonnes dtail disponibles. Le type
de donnes de chaque colonne est affich. Si vous slectionnez une
colonne du dtail dont le type nest pas identique celui de la
colonne matre correspondante, il ne se passe rien car les colonnes de
liaison doivent tre de mme type. Si la colonne slectionne est
correcte, elle est affiche dans la proprit Colonnes lies dtail.
Pour lier les deux ensembles de donnes sur plusieurs colonnes,
rptez les deux tapes prcdentes autant de fois que ncessaire.
Pour retarder la lecture des enregistrements du dtail jusqu ce
quils soient ncessaires, cochez la case Retarder la lecture des
enregistrements dtail jusqu ce que cela soit ncessaire. Pour
davantage dinformations sur cette option, voir Lecture des
dtails, page 9-7.
Pour vrifier que les ensembles de donnes sont correctement
connects, cliquez sur le bouton Tester le lien. La zone dtat indique
alors Excution, Succs ou Echec.
Pour terminer les spcifications, cliquez sur OK.
4 Ajoutez des composants visuels (comme JdbTables) pour pouvoir
visualiser et modifier les donnes. Affectez la proprit dataSet de
lun, lensemble de donnes matre et la proprit dataSet de lautre,
lensemble de donnes dtail.
5 Compilez et excutez lapplication.
Lensemble de donnes matre affiche tous les enregistrements.
Lensemble de donnes dtail naffiche que les enregistrements
correspondant aux valeurs des colonnes lies de la ligne en cours de
lensemble de donnes matre mais, par dfaut, sans afficher les
colonnes lies.
9-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s u n e r e l a t i o n m a t r e - d t a i l
Enregistrement des modifications dans une relation matre-dtail
Dans JBuilder, les donnes sont extraites dun serveur ou dun fichier texte
et places dans un ensemble de donnes. Une fois les donnes fournies
lensemble de donnes, il est possible de les modifier et de travailler avec
la copie locale des donnes par programme ou en utilisant les composants
orients donnes. Pour enregistrer les modifications dans la base de
donnes ou le fichier texte, il faut rsoudre les modifications dans la
base de donnes ou exporter les modifications dans un fichier texte. Les
diffrentes options de rsolution vers une base de donnes sont prsentes
dans le Chapitre 8, Enregistrement des modifications dans la source
de donnes, et les options dexportation des donnes dans un fichier
texte dans Exportation des donnes, page 3-3.
Dans une relation matre-dtail, deux sources de donnes (une
combinaison de tables de base de donnes et/ou de fichiers texte) sont
fournies au moins deux ensembles de donnes. Il y a gnralement trois
moyens diffrents de rsoudre les modifications dans une relation matre
dtail :
Placez un JButton dans lapplication et crivez le code de rsolution
associ au bouton qui crit les donnes pour chaque ensemble de
donnes. Un exemple de cette manire de procder est prsent par la
rubrique Enregistrement des modifications dun QueryDataSet,
page 8-3.
Si les deux ensembles de donnes sont des QueryDataSet, vous pouvez
enregistrer les modifications dans les ensembles de donnes matre et
dtail en utilisant la mthode saveChanges(DataSet[]) du composant
Database au lieu dutiliser la mthode saveChanges() de chacun des
ensembles de donnes. Un appel de la mthode
Database.saveChanges(DataSet[]) conserve la synchronisation des
ensembles de donnes et valide toutes les donnes en une seule
transaction. Au contraire, des appels spars de la mthode
DataSet.saveChanges() ne conservent pas la synchronisation des
ensembles de donnes et valident les donnes dans des transactions
distinctes. Pour davantage dinformations, voir la section Rsolution
des ensembles de donnes matre-dtail avec une source JDBC,
page 9-13.
Placez un composant QueryResolver dans lapplication afin de
personnaliser le processus de rsolution. Voir Personnalisation de la
logique de rsolution par dfaut, page 8-16, pour davantage
dinformations.
Placez un JdbNavToolBar dans lapplication et utilisez le bouton
Enregistrer pour enregistrer les modifications.
E t a b l i s s e me n t d u n e r e l a t i o n m a t r e - d t a i l 9-13
E n r e g i s t r e m e n t d e s m o d i f i c a t i o n s d a n s u n e r e l a t i o n m a t r e - d t a i l
Vous pouvez utiliser un seul navigateur JdbNavToolBar pour les deux
ensembles de donnes. Le composant JdbNavToolBar sattache
automatiquement lensemble de donnes qui dtient la focalisation.
Voir aussi
Chapitre 8, Enregistrement des modifications dans la source
de donnes
Rsolution des ensembles de donnes matre-dtail avec
une source JDBC
Comme, par dfinition, une relation matre-dtail implique au moins deux
ensembles de donnes, la manire la plus simple de rsoudre les donnes
dans la source de donnes consiste utiliser la mthode
saveChanges(DataSet[]) du composant Database (en supposant que des
composants QueryDataSet sont utiliss comme source de donnes).
Lexcution de la mthode Database.saveChanges(DataSet[]) provoque par
dfaut lenregistrement dans la source de donnes JDBC de toutes les
insertions, suppressions et modifications effectues sur les donnes des
ensembles de donnes, le tout en une seule transaction. Quand la
proprit masterLink a t utilise pour dfinir une relation matre-dtail
entre deux ensembles de donnes, les modifications faites sur les deux
ensembles de donnes ainsi associs sont enregistres dans lordre
suivant :
1 Les suppressions
2 Les mises jour
3 Les insertions.
Pour les suppressions et les mises jour, les donnes du dtail sont
traites en premier. Pour les insertions, lensemble de donnes matre est
trait en premier.
Si une application est en train dutiliser un JdbNavToolBar pour les
fonctionnalits denregistrement et de rafrachissement, la proprit
fetchAsNeeded doit tre dfinie par false afin dviter la perte de
modifications non enregistres. Car, lorsque la proprit fetchAsNeeded
vaut true, chaque ensemble dtail est lu individuellement, et il est aussi
rafrachi individuellement. Comme le bouton Enregistrer nenregistre les
modifications que des donnes ayant la focalisation, il faudrait cliquer
deux fois sur ce bouton, la premire pour enregistrer les modifications de
lensemble de donnes matre et la deuxime pour enregistrer les
modifications de lensemble de donnes dtail. Si la mthode
Database.saveChanges(DataSet[]) est utilise la place, toutes les
modifications seront postes dans lordre qui convient au cours de la
mme transaction tous les ensembles de donnes lis.
9-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-1
C h a p i t r e
10
Chapitre10Utilisation des modules
de donnes pour simplifier
laccs aux donnes
Un module de donnes est un conteneur spcialis pour les composants
daccs aux donnes. Les modules de donnes simplifient le
dveloppement de laccs aux donnes dans vos applications. Les
modules de donnes proposent un conteneur utilisable la conception
pour tous les composants daccs aux donnes. Cela permet de
dcomposer le code en modules et de sparer les rgles de fonctionnement
et daccs aux bases de donnes de vos applications davec la logique de
linterface utilisateur de lapplication. Vous pouvez galement garder le
contrle sur lutilisation du module de donnes, en fournissant seulement
les fichiers classe aux dveloppeurs dapplication.
Une fois que des composants ensemble de donnes, et les colonnes
associes, ont t dfinis dans un module de donnes, toutes les
applications utilisant ce module ont un accs homogne aux ensembles de
donnes et aux colonnes sans quil soit ncessaire de les recrer dans
chaque application chaque fois quils sont utiliss. Il nest pas ncessaire
que les modules de donnes se trouvent dans le mme rpertoire ou le
mme paquet que votre projet. Vous pouvez mme les placer un endroit
permettant de les partager entre plusieurs dveloppeurs ou entre
diffrentes applications.
DataModule est une interface qui dclare le comportement de base dun
module de donnes. Pour manipuler par programme cette interface, il faut
limplmenter dans une classe de module de donnes et ajouter des
composants daccs aux donnes.
10-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
Lorsque vous crez un module de donnes et ajoutez des composants qui
apparatront automatiquement sous la section Accs aux donnes du volet
contenu (Database, DataSet, DataStore), une mthode dacquisition est
gnre. Cela signifie que chacun de ces composants sera disponible dans
une liste de choix pour le projet qui rfrence le module de donnes. Par
exemple, vous pouvez
Ajouter un composant Database un module de donnes.
Compiler le module de donnes.
Ajouter un composant QueryDataSet lapplication qui contient le
module de donnes ou au module de donnes lui-mme.
Dans la bote de dialogue de la proprit query, slectionner
ModuleDeDonnees1.database1 (ou quelque chose de similaire) dans
la bote de choix Base de donnes.
Ce chapitre prsente deux faons de crer un module de donnes :
Cration dun module de donnes en utilisant les outils de conception
Cration de modules de donnes en utilisant le modeleur de donnes
Cration dun module de donnes en utilisant les outils de
conception
Les sections suivantes expliquent comment crer un module de donnes,
en utilisant les outils de conception visuelle, comme lexpert Module de
donnes et le concepteur dinterface utilisateur.
Cration du module de donnes avec lexpert
Pour crer un module de donnes,
1 Crez un nouveau projet.
2 Slectionnez Fichier|Nouveau et double-cliquez sur licne Module de
donnes.
3 Spcifiez le paquet et le nom de la classe du module de donnes.
JBuilder remplit automatiquement le nom et le chemin daccs du
fichier Java en fonction de vos saisies. Pour crer le module de donnes
en utilisant le concepteur JBuilder, dsactivez Appeler le Modeleur de
donnes.
4 Cliquez sur OK pour fermer la bote de dialogue.
La classe du module de donnes est cre et ajoute au projet.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-3
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
5 Double-cliquez sur le fichier du module de donnes dans le volet projet
afin de louvrir dans le volet Contenu.
6 Examinez le code source.
Le code gnr par lexpert pour la classe du module de donnes
diffre sensiblement du code gnr par les autres experts. La mthode
getDataModule() est dfinie comme public static. Cette mthode a pour
fonction de permettre le partage dune seule instance de ce module de
donnes par plusieurs cadres. Le code gnr pour cette mthode est :
public static ModuleDeDonnees1 getDataModule() {
if (myDM == null){
myDM = new ModuleDeDonnees1();}
return myDM;
}
Le code de cette mthode,
Dclare cette mthode comme static. Cela signifie quil est possible
dappeler cette mthode sans une instanciation en cours dun objet
classe DataModule.
Renvoie une instance de la classe DataModule.
Vrifie sil y a dj une instanciation dun DataModule.
Cre et renvoie un nouveau DataModule sil nexiste pas dj.
Renvoie un objet DataModule sil est dj instanci.
La classe du module de donnes contient alors toutes les mthodes
ncessaires une classe de module de donnes personnalise et un
squelette de mthode pour jbInit(), auquel il faut ajouter des
composants daccs aux donnes et la logique de gestion personnalise.
Ajout de composants donnes un module de donnes
Pour personnaliser votre module de donnes en utilisant le concepteur
dinterface utilisateur,
Remarque Bien que les modules de donnes ne saffichent pas dans le concepteur en
tant que composants visibles comme les composants dbSwing, ils sont
utiles. Dans le concepteur, vous pouvez rapidement ajouter et modifier
des composants daccs aux donnes dans la palette des composants, le
volet structure et linspecteur.
1 Double-cliquez sur le fichier du module de donnes dans le volet projet
afin de louvrir dans le volet Contenu.
2 Slectionnez longlet Conception du volet Contenu pour activer le
concepteur dinterface utilisateur.
3 Ajoutez les composants donnes la classe du module de donnes.
10-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
Par exemple,
a Slectionnez un composant Database de la page DataExpress de la
palette des composants.
b Cliquez dans larborescence des composants ou dans le concepteur
dinterface utilisateur pour ajouter le composant Database au module
de donnes.
c Initialisez la proprit connection via le connectionDescriptor de la
base de donnes. La dfinition de cette proprit dans linspecteur
est dcrite au Chapitre 4, Connexion une base de donnes.
Les composants donnes sont ajouts au module de donnes ds quils
sont ajouts un fichier cadre. Pour davantage dinformations sur lajout
de composants donnes, voir Chapitre 5, Extraction des donnes
dune source de donnes.
Remarque JBuilder cre automatiquement le code dune mthode publique qui
obtient chaque composant DataSet plac dans le module de donnes.
Ainsi les composants DataSet peuvent apparatre comme des proprits
(en lecture seule) du module de donnes. Cela permet galement aux
composants DataSet dtre accessibles la proprit dataSet des
composants orients donnes dans linspecteur quand des composants
orients donnes et des modules de donnes sont utiliss dans le mme
conteneur.
Une fois cette tape acheve, le module de donnes a la forme suivante :
package datamoduleexample;
import com.borland.dx.dataset.*;
import com.borland.dx.sql.dataset.*;
public class ModuleDeDonnees1 implements DataModule {
private static ModuleDeDonnees1 myDM;
Database database1 = new Database();
public ModuleDeDonnees1() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
database1.setConnection(new
com.borland.dx.sql.dataset.ConnectionDescriptor("
jdbc:borland:dslocal:/usr/local/<jbuilder>/samples/JDataStore/
datastores/employee.jds", "votre nom", "", false,
"com.borland.datastore.jdbc.DataStoreDriver"));
}
public static ModuleDeDonnees1 getDataModule() {
if (myDM == null)
myDM = new ModuleDeDonnees1();
return myDM;
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-5
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
}
public com.borland.dx.sql.dataset.Database getDatabase1() {
return database1;
}
}
Ajout de la logique mtier au module de donnes
Une fois les composants daccs aux donnes ajouts et les proprits
correspondantes dfinies, vous pouvez dfinir vos rgles de gestion
personnalises dans le module de donnes. Par exemple, certains
utilisateurs peuvent avoir le droit de supprimer les enregistrements alors
que dautres ne lont pas. Pour ce faire, ajoutez du code aux diffrents
vnements des composants ensemble de donnes du module de
donnes.
Remarque Le paramtrage des proprits et le codage des rgles de gestion dfinis
dans le modle de donnes ne peuvent tre redfinis dans une application
utilisant le modle de donnes. Si vous avez cr un comportement qui ne
sapplique pas systmatiquement toutes les applications utilisant ce
modle de donnes, il vous faudra probablement crer plusieurs modles
de donnes adapts aux besoins des divers groupes dapplications ou
dutilisateurs.
Pour ajouter du code aux vnements dun composant,
1 Double-cliquez sur le fichier du module de donnes dans le volet projet
afin de louvrir dans le volet Contenu.
2 Slectionnez longlet Conception du volet Contenu pour activer le
concepteur dinterface utilisateur.
3 Slectionnez le composant auquel vous voulez ajouter des rgles de
gestion, puis cliquez sur longlet Evnements dans linspecteur.
4 Double-cliquez sur lvnement associ la rgle de gestion.
JBuilder cre le squelette dans le fichier source Java auquel vous
pouvez ajouter le code de votre rgle de gestion personnalise.
Utilisation dun module de donnes
Pour utiliser un module de donnes dans une application, il faut tout
dabord lenregistrer et le compiler. Dans le module de donnes :
1 Choisissez Fichier|Tout enregistrer.
Notez le nom du projet, du paquet et du module de donnes.
2 Compilez la classe du module de donnes en choisissant Projet|
Construire le projet.
10-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
Cela cre les fichiers de la classe du module de donnes dans le
rpertoire spcifi par Projet|Proprits du projet, Chemin de sortie.
3 Choisissez Fichier|Fermer.
Pour faire rfrence au module de donnes dans une application, vous
devez dabord lajouter votre projet en tant que bibliothque ncessaire.
Ajout dune bibliothque ncessaire un projet
Ces instructions gnrales pour ajouter une bibliothque ncessaire
utilisent comme exemple un module de donnes, mais les mmes tapes
peuvent tre suivies pour ajouter nimporte quelle bibliothque
ncessaire. Une bibliothque peut tre un fichier classe, comme un
module de donnes, ou une archive, comme un fichier JAR (.jar).
Pour ajouter un module de donnes comme bibliothque requise,
1 Ouvrez la bote de dialogue Proprits du projet (Projet|Proprits du
projet).
2 Slectionnez Bibliothques ncessaires sur la page Chemins et ajoutez
un fichier classe ou un fichier archive comme nouvelle bibliothque.
Dans le cas particulier de lajout dun module de donnes, ce sera le
fichier classe du module de donnes que vous venez de compiler.
3 Cliquez sur Ajouter pour ouvrir la bote de dialogue Slectionnez une
ou plusieurs bibliothques.
4 Cliquez sur Nouveau.
Lexpert Nouvelle bibliothque souvre.
5 Entrez le nom de la bibliothque (comme ModuleDonnesEmploys).
6 Slectionnez lemplacement o vous voulez mettre le fichier <nom
bibliothque>.library.
Vous avez le choix entre JBuilder, Projet et Home de lutilisateur. Si
vous excutez JBuilder depuis un rseau, et que vous voulez rendre
votre bibliothque accessible tous, vous devez slectionner JBuilder.
Cela placera le fichier <nom bibliothque>.library dans le rpertoire /lib
de votre installation de JBuilder. Si vous tes le seul dveloppeur
accder votre bibliothque, vous pouvez choisir une des autres
options, pour que le fichier .library soit stock en local.
7 Cliquez sur Ajouter, naviguez jusquau dossier contenant le chemin
daccs au fichier classe ou larchive ajouter, puis cliquez sur OK.
JBuilder dtermine automatiquement les chemins daccs aux fichiers
classe, aux fichiers source et aux fichiers de documentation, lintrieur
de ce dossier. Le champ Chemins de bibliothques indique le chemin
daccs la nouvelle bibliothque.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-7
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
8 Cliquez sur OK pour fermer lexpert.
9 Cliquez sur OK pour fermer la bote de dialogue Slectionnez une ou
plusieurs bibliothques.
A ce stade, vous voyez que votre nouvelle bibliothque a t ajoute
la liste des bibliothques ncessaires.
10 Cliquez sur OK pour fermer la bote de dialogue Proprits du projet.
Rfrencement dun module de donnes dans votre application
Maintenant que vous avez ajout le module de donnes en tant que
bibliothque ncessaire, voici les tapes suivre pour rfrencer un
module de donnes dans votre application :
1 Fermez tous les projets ouverts (Fichier|Fermer les projets).
2 Choisissez Fichier|Nouveau et double-cliquez sur licne Application
dans la page Gnral de la galerie dobjets.
Cela cre et une application et un projet.
3 Entrez les informations appropries relatives au paquet et la classe.
4 Slectionnez le fichier cadre de lapplication dans le voler contenu.
5 Vrifiez que DataExpress est spcifie comme une des bibliothques
ncessaires.
Si DataExpress napparat pas dans la liste des bibliothques
ncessaires de la bote de dialogue Proprits du projet (Projet|
Proprits du projet),
a Cliquez sur Ajouter.
b Slectionnez DataExpress.
c Cliquez sur OK jusqu la fermeture de la bote de dialogue
Proprits du projet.
6 Assurez-vous que le module de donnes a t ajout en tant que
bibliothque ncessaire.
7 Importez le paquet auquel appartient la classe du module de donnes
(sil est lextrieur de votre paquet) en choisissant Expert|Utiliser un
module de donnes.
8 Cliquez sur les points de suspension (...) pour ouvrir la bote de
dialogue Slection du module de donnes.
Une arborescence de tous les paquets et classes connus est affiche.
Naviguez jusqu lemplacement des fichiers classe gnrs lors de
lenregistrement et de la compilation du module de donnes (ce doit
tre sous le nud de larborescence portant le mme nom que votre
paquet, si le module de donnes fait partie dun paquet). Slectionnez
10-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
la classe du module de donnes. Si vous ne voyez pas la classe du
module de donnes cet emplacement, vrifiez que le projet du
module de donnes sest bien compil sans erreurs et quil a t
correctement ajout aux bibliothques ncessaires pour le projet.
9 Cliquez sur OK.
Si vous obtenez un message derreur ce stade, vrifiez les
bibliothques ncessaires dans les proprits du projet et
lemplacement du fichier classe de votre module de donnes.
Cliquez sur longlet Conception pour ouvrir le concepteur dinterface
utilisateur ; linstance du module de donnes apparat dans
larborescence. Cliquer sur lentre du module de donnes ne fait pas
apparatre ses composants ensemble de donnes ni ses composants
colonnes. Ce comportement est voulu car il empche la modification des
rgles de gestion dfinies dans le module de donnes hors de celui-ci.
Lors de la conception de lapplication, la proprit dataSet des composants
dinterface utilisateur propose tous les composants DataSetView et
StorageDataSet inclus dans le module de donnes. Vous y avez accs bien
quils napparaissent pas de manire distincte dans le volet contenu.
Si vous avez un modle de donnes complexe et/ou des rgles de gestion
dont vous voulez interdire la modification par un autre dveloppeur ou la
manipulation par un utilisateur, lencapsulation dans un composant
rutilisable constitue le meilleur moyen de donner accs aux donnes tout
en conservant la matrise des rgles de gestion.
Comprhension de lexpert Utilisation dun module de donnes
Lorsque vous choisissez Experts|Utiliser un module de donnes, vous
faites apparatre lexpert suivant :
Slectionnez un module de donnes en slectionnant les points de
suspension dans le champ Classe DataModule. Une arborescence de tous
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-9
C r a t i o n d u n m o d u l e d e d o n n e s e n u t i l i s a n t l e s o u t i l s d e c o n c e p t i o n
les paquets et classes connus est affiche. Si vous ne trouvez pas votre
classe DataModule dans cette liste, utilisez Projet|Proprits du projet pour
ajouter le paquet ou larchive aux bibliothques requises du projet.
Placez-vous sur lemplacement des fichiers classe gnrs quand le
module de donnes a t enregistr et compil. Slectionnez la classe du
module de donnes.
Dans la zone Dclaration de champ Java, le nom de champ par dfaut est
le nom du module de donnes suivi dun 1. Cest le nom utilis pour la
variable membre gnre dans le code. Le module de donnes sera
galement dsign par ce nom dans larborescence des composants.
Saisissez un nom qui dcrit les donnes du module de donnes, comme
ModuleDonnesEmploys.
Dans la section Dclaration de champ Java, vous pouvez choisir un des
moyens suivants dutiliser le DataModule dans votre application :
Crer une nouvelle instance de DataModule
Si vous avez une seule sous-classe Frame dans votre application,
slectionnez cette option.
Partager linstance (statique) du DataModule
Si vous envisagez de faire rfrence au module de donnes dans
plusieurs cadres de votre application et si vous voulez partager une
seule instance de la classe DataModule personnalise, slectionnez cette
option.
Lappeleur dfinit une instance avec setModule()
Slectionnez cette option lorsque vous disposez de plusieurs modules
de donnes diffrents, par exemple, un module de donnes qui obtient
les donnes localement et un autre qui les obtient distance.
Choisissez OK pour ajouter le module de donnes au paquet et injecter le
code appropri dans le fichier source en cours afin de crer une instance
du module de donnes.
Selon les choix indiqus dans le dialogue prcdent, le code suivant est
ajout la mthode jbinit() du fichier du cadre. Notez que loption
Partager linstance (statique) du DataModule est slectionne :
ModuleDeDonnes12 =
com.borland.samples.dx.datamodule.ModuleDeDonnees1.getDataModule();
Si loption Crer une nouvelle instance de DataModule est slectionne, le
code suivant est ajout la mthode jbInit() du fichier du cadre :
ModuleDeDonnes12 = new com.borland.samples.dx.datamodule.ModuleDeDonnees1();
Si loption Lappeleur dfinit une instance avec setModule() est
slectionne, une mthode setModule() est ajoute la classe en cours de
modification.
10-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Cration de modules de donnes en utilisant le modeleur de
donnes
LEDI de JBuilder fournit des outils qui facilitent et acclrent la cration
des applications interrogeant une base de donnes. Le Modeleur de
donnes peut construire des modules de donnes encapsulant une
connexion une base et les requtes excuter sur cette base. Lexpert
Application Module de donnes peut ensuite utiliser ce module de
donnes pour crer une application de base de donnes client-serveur.
Cration des requtes avec le modeleur de donnes
JBuilder peut largement simplifier les tches de visualisation et de mise
jour des donnes de vos bases. Le modeleur de donnes JBuilder vous
permet de crer visuellement vos requtes SQL et les enregistre dans des
modules de donnes Java JBuilder.
Pour commencer un nouveau projet,
1 Choisissez Fichier|Nouveau projet pour dmarrer lexpert projet.
2 Choisissez lemplacement et le nom du projet.
3 Cliquez sur le bouton Terminer.
Pour plus dinformations sur la cration de projets, voir Cration et
gestion des projets dans Construction dapplications avec JBuilder.
Pour afficher le modeleur de donnes,
1 Choisissez Fichier|Nouveau.
2 Double-cliquez sur licne Module de donnes dans la page Gnral de
la galerie dobjets.
3 Entrez un nom de paquet et de classe pour le module de donnes que
vous voulez crer, et cochez loption Appeler le Modeleur de donnes.
4 Cliquez sur OK.
Le modeleur de donnes apparat.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-11
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Figure 10.1 Modeleur de donnes
Pour ouvrir un module de donnes Java existant dans le modeleur de
donnes,
1 Cliquez avec le bouton droit sur le module dans le volet projet..
2 Choisissez Ouvrir avec le Modeleur de donnes.
Ouverture dune URL
Pour commencer construire une requte SQL, vous devez dabord
ouvrir une URL de connexion. Il y a plusieurs faons de le faire :
Double-cliquer sur lURL donnant accs vos donnes.
Choisir licne de dveloppement.
Slectionner lURL puis choisir Base de donnes|Ouvrir une URL de
connexion.
Si la base de donnes laquelle vous voulez accder napparat pas dans
la liste URL base de donnes du modeleur de donnes, vous pouvez
lajouter.
1 Choisissez Base de donnes|Ajouter une URL de connexion pour
afficher la bote de dialogue Nouvelle URL.
2 Slectionnez un pilote install dans la liste droulante des pilotes, ou
tapez le pilote souhait.
Pour les exemples, vous pouvez slectionner
com.borland.datastore.jdbc.DataStoreDriver.
3 Tapez une URL ou utilisez le bouton Parcourir pour slectionnez lURL
des donnes auxquelles vous voulez accder.
Pour les exemples, slectionnez la base de donnes employee.jds situe
dans le rpertoire samples de votre installation JBuilder, /samples/
JDataStore/datastores/employee.jds. Utilisez le bouton Parcourir pour
naviguer jusqu ce fichier afin dviter les fautes de frappe.
10-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Dbut dune requte
Commencez par effectuer ce qui suit :
1 Slectionnez la table interroger puis les colonnes ajouter la requte
ou la fonction statistique oprant sur une colonne particulire.
a Double-cliquez sur le nud Tables ou choisissez licne de
dveloppement Tables pour voir les tables.
b Dans la liste des tables, slectionnez la table que vous voulez
interroger et double-cliquez. Double-cliquez sur le nud Colonnes
pour voir toutes les colonnes de la table slectionne.
2 Ajoutez une ou plusieurs colonnes une instruction SELECT de la
requte
Linstruction SELECT est linstruction de lecture (ou extraction) des
donnes qui renvoie un nombre variable de lignes comportant un
nombre de colonnes fixe. Le modeleur de donnes vous aide
construire votre instruction SELECT. La clause SELECT spcifie la liste
des colonnes extraire.
a Dans la table laquelle vous voulez avoir accs, slectionnez une
colonne ajouter.
b Cliquez sur le bouton Copier.
Le nom de la colonne slectionne apparat dans la bote Colonnes
slectionnes et le nom de la table en haut dans le panneau Requtes.
Continuez la slection des colonnes jusqu avoir tout ce qui vous
intresse dans la table. Si vous voulez slectionner toutes les
colonnes, cliquez sur le bouton Tout copier.
Figure 10.2 Slection des colonnes
3 Ajoutez une fonction statistique la requte.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-13
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Les fonctions statistiques (ou dagrgation) produisent une nouvelle
valeur partir dun ensemble de valeurs. Les fonctions statistiques sont
SUM, AVG, MIN, MAX et COUNT.
a Cliquez sur le bouton Statistiques pour afficher la bote de dialogue
ci-dessous.
Figure 10.3 Bote de dialogue dagrgation
b Dans la liste Colonnes disponibles, cliquez sur la colonne dont vous
souhaitez agrger les valeurs.
c Dans la liste Fonctions statistiques, cliquez sur la fonction que vous
souhaitez utiliser sur la colonne slectionne.
d Cochez la case Distinct si vous souhaitez que la fonction nopre que
sur les valeurs uniques de la colonne slectionne.
e Choisissez Ajouter une fonction statistique pour ajouter la fonction
votre requte.
Au fur et mesure que vous slectionnez des colonnes, votre instruction
SQL SELECT se construit. Lorsque vous agrgez des donnes, vous devez
inclure une clause GROUP BY. Pour plus dinformations sur les clauses
GROUP BY, voir Ajout dune clause Group By, page 10-14.
Pour voir votre instruction SQL, cliquez sur longlet SQL.
10-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Ajout dune clause Group By
La clause GROUP BY est utilise pour grouper les donnes renvoyes par
une instruction SELECT et souvent en conjonction avec les fonctions
statistiques. Lors de son utilisation avec les fonctions statistiques, voici ce
qui se passe :
Dabord, les donnes sont limites par une clause WHERE, lorsquelle
existe.
Les donnes sont ensuite groupes selon le champ indiqu par la clause
GROUP BY.
Puis, les fonctions statistiques sont appliques aux groupes et une ligne
de rsultat est gnre (une par groupe).
Pour ajouter une clause Group By votre requte, cliquez sur longlet
Group By afin dafficher la page Group By.
Figure 10.4 Page Group By
La liste Colonnes disponibles contient les colonnes de la requte en cours
dans le panneau Requtes du modeleur de donnes. La bote Group By
contient les noms des colonnes sur lesquelles la requte effectuera le
regroupement. Par dfaut, la requte nest pas groupe sur une colonne
jusqu ce que vous en spcifiiez une.
Pour ajouter une clause Group By votre requte,
1 Slectionnez la colonne sur laquelle vous souhaitez regrouper la
requte.
2 Cliquez sur le bouton dajout (>) afin de transfrer le nom de colonne
dans la bote Group By.
Une clause Group By est ajoute votre instruction SQL SELECT. Pour la
voir, cliquez sur longlet SQL.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-15
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Slection des lignes ayant des valeurs de colonnes uniques
Si vous voulez ne voir que les lignes contenant des valeurs de colonne
uniques, utilisez le mot cl DISTINCT. Si vous ajoutez le mot-cl
DISTINCT linstruction SELECT, vous tes sr de ne pas avoir deux
lignes exactement identiques dans lensemble de rsultats de la requte.
DISTINCT affecte toutes les colonnes de linstruction SELECT.
Pour ajouter le mot cl DISTINCT, cochez loption Distinct sur la page
Colonnes.
Ajout dune clause Where
Ajouter une clause WHERE une instruction SELECT spcifie la
condition que doivent satisfaire les lignes pour entrer dans la table
rsultant de la requte. Pour ajouter une clause Where votre requte
SQL, cliquez sur longlet Where.
Figure 10.5 Page Where
A gauche, la liste Colonnes contient les colonnes des tables de la requte
en cours dans le panneau Requtes du modeleur de donnes.
Utilisez les listes Colonnes, Oprateurs et Fonctions pour construire la
clause Where dans la bote Clause Where comme ci-dessous :
1 Slectionnez la colonne dans la liste Colonnes et cliquez sur le bouton
Coller la colonne pour faire passer une colonne, en tant que nom de
colonne, dans la bote Clause Where.
2 Pour faire passer une colonne, en tant que paramtre dune requte
paramtre, slectionnez la colonne dans la liste Colonnes et cliquez sur
le bouton Coller le paramtre.
3 Slectionnez loprateur dont vous avez besoin dans la liste droulante
Oprateurs et cliquez sur le bouton Coller.
10-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Chaque clause Where ncessite au moins un oprateur.
4 Si votre requte ncessite une fonction, slectionnez celle-ci dans la liste
droulante Fonctions et cliquez sur le bouton Coller.
En collant des slections, vous crez une clause Where. Vous pouvez aussi
modifier directement le texte dans la bote Clause Where pour terminer
votre requte. Par exemple, supposons que vous crez une clause Where
comme celle-ci :
WHERE PAYS=USA
Vous devrez slectionner et coller la colonne PAYS et loprateur =. Pour
terminer la requte, vous pouvez saisir directement la valeur de donnes,
qui dans ce cas est USA.
Lorsque vous tes satisfait de votre clause Where, cliquez sur le bouton
Appliquer. La clause Where est ajoute linstruction SQL SELECT
entire. Pour la voir, cliquez sur longlet SQL.
Ajout dune clause Order By
Une clause ORDER BY est utilise pour trier ou modifier lordre des
donnes de la table rsultat. Pour spcifier comment trier les lignes dune
table,
1 Dans le panneau Requtes, slectionnez la requte que vous voulez
trier.
2 Dans le panneau Requte en cours, cliquez sur longlet Order By.
Figure 10.6 Page Order By
3 Slectionnez la colonne sur laquelle vous voulez que la requte soit
trie dans la bote Colonnes disponibles et cliquez sur le bouton dajout
(>) pour transfrer cette colonne dans la bote Order By.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-17
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
4 Slectionnez la direction de lordre de tri dans les options
correspondantes.
Loption Croissant trie la colonne spcifie de la plus petite valeur la
plus grande, loption Dcroissant trie la colonne spcifie de la plus
grande valeur la plus petite. Par exemple, si le tri est alphabtique,
Croissant trie la colonne dans lordre alphabtique et Dcroissant dans
lordre inverse.
Vous pouvez trier la requte sur plusieurs colonnes en transfrant
plusieurs colonnes dans la bote Order By. Slectionnez dabord la colonne
de tri primaire, puis slectionnez la secondaire, et ainsi de suite. Par
exemple, si votre requte comprend une colonne Pays et une colonne
Client et que vous voulez voir tous les clients dun pays ensemble dans
votre requte, vous devez dabord transfrer la colonne Pays dans la bote
Order By puis la colonne Client. Vous pouvez prciser un ordre de tri
ascendant ou descendant pour chacune des colonnes proposes dans
Order By.
Modification directe de la requte
A tout moment pendant que vous utilisez le modeleur de donnes pour
crer votre requte, vous pouvez voir linstruction SQL SELECT et la
modifier directement.
Pour visualiser linstruction SELECT, cliquez sur longlet SQL. Pour la
modifier, tapez directement les modifications dans linstruction SELECT.
Test de votre requte
Vous pouvez voir le rsultat de votre requte dans le modeleur de
donnes. La requte cre ici ne sexcutera pas ; ces rubriques ont t
prsentes de faon favoriser leur comprhension, pas de faon
excuter correctement la requte.
Pour voir le rsultat de la requte que vous construisez,
1 Cliquez sur longlet Test.
2 Cliquez sur le bouton Excuter la requte.
Si votre requte est une requte paramtre, une bote de dialogue
Spcification des valeurs de paramtres apparat pour vous permettre de
saisir la valeur de chaque paramtre. Lorsque vous choisissez OK, la
requte sexcute et les rsultats saffichent. Les valeurs entres ne sont
pas enregistres dans le module de donnes.
Construction de requtes multiples
Pour construire des requtes multiples, choisissez Requtes|Ajouter. Le
modeleur de donnes est alors prt entreprendre la construction dune
nouvelle requte. Au fur et mesure que vous slectionnez des colonnes
10-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
dans une ou plusieurs tables, les noms des tables apparaissent la place
du champ <nouvelle requte>.
Spcification dune relation matre-dtail
Pour dfinir une relation matre-dtail entre deux requtes,
1 Affichez la bote de dialogue Liaison entre requtes par lun des
moyens suivants :
a Choisissez Requtes|Lien.
b Dans le panneau Requtes, cliquez et faites glisser le pointeur de la
souris de la requte dont vous voulez faire la requte matre vers la
requte dont vous voulez faire la requte dtail.
Figure 10.7 Bote de dialogue Liaison entre requtes
2 Slectionnez la requte qui sera la requte matre dans le champ
Requte matre.
3 Slectionnez la requte qui sera la requte dtail dans le champ Requte
dtail.
Les champs Requte matre et Requte dtail sont remplis par des
champs proposs par le programme. Sils ne vous conviennent pas,
faites les modifications ncessaires.
4 Utilisez la table pour indiquer de manire visuelle les colonnes liant les
requtes matre et dtail :
a Cliquez sur la premire ligne situe sous la colonne requte matre
de la table pour afficher la liste droulante de toutes les colonnes
spcifies dans la table matre. Slectionnez la colonne sur laquelle
vous voulez grouper les donnes dtail.
b Cliquez sur la premire ligne situe sous la colonne requte dtail de
la table pour afficher la liste droulante de toutes les colonnes ayant
le mme type de donnes et la mme longueur que la colonne matre
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-19
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
en cours. Slectionnez la colonne souhaite. Cela suffit lier les
tables matre et dtail.
c Si vous souhaitez slectionner dautres colonnes de liaison, rptez
les deux tapes sur les lignes suivantes situes sous la colonne
requte matre.
d Cliquez sur OK.
Lorsque la bote de dialogue Liaison entre requtes se ferme, une flche
apparat entre les deux requtes dans le panneau Requtes pour figurer la
relation tablie entre elles.
Figure 10.8 Flches montrant les relations entre les requtes
Pour plus dinformations sur les relations matre-dtail, voir Chapitre 9,
Etablissement dune relation matre-dtail
Enregistrement de vos requtes
Pour enregistrer le module de donnes que vous construisez,
1 Pour enregistrer le module de donnes, cliquez sur Fichier|Enregistrer
dans le modeleur de donnes.
2 Quittez le modeleur de donnes.
Le fichier rsultant apparat dans votre projet.
3 Compilez le module de donnes.
Double-cliquez sur le fichier dans le volet projet pour louvrir dans le
volet contenu et voir le code gnr par le modeleur de donnes.
10-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Figure 10.9 Editeur montrant le code gnr par le Modeleur de donnes
Gnration dapplications de bases de donnes
A partir du module de donnes compil, JBuilder peut gnrer des
applications client/serveur 2 niveaux avec lexpert Application Module
de donnes.
Pour afficher lexpert Application Module de donnes, slectionnez
licne de lexpert Application Module de donnes dans la galerie
dobjets :
1 Choisissez Fichier|Nouveau et slectionnez longlet Gnral.
2 Double-cliquez sur licne Application Module de donnes.
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-21
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Figure 10.10 Expert Application Module de donnes
3 Spcifiez dans la bote de dialogue qui apparat alors le fichier de
module de donnes partir duquel vous voulez gnrer une
application.
Vous pouvez slectionner nimporte quel module de donnes JBuilder
disponible ou un de ceux crs par le modeleur de donnes.
4 Cliquez sur OK.
Lexpert cre pour vous une application de base de donnes. Lexpert
gnre plusieurs fichiers Java et un fichier HTML :
Les fichiers qui constituent le client se trouvent dans un paquet client
deux niveaux (le nom de ce paquet respecte le format
<nom_projet>._<module_donnes>.twotier) :
Un ou plusieurs UIBeans.java - Chaque bean implmente une
interface utilisateur pour chaque DataSet particulier.
ClientAboutBoxDialog.java - Implmente le dialogue A propos du
menu Aide du client.
ClientFrame.java - Le cadre de lapplication client, cest--dire le
conteneur de linterface utilisateur client par dfaut. Implmente la
barre de menus de lapplication.
ClientResources.java - Contient les chanes de lapplication client
pour la localisation.
<modulededonnes>TwoTierApp.java - Lapplication.
<modulededonnes>AppGenFileList.html - Liste des fichiers gnrs
comportant pour chacun une brve description.
10-22 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
Utilisation dans votre code dun module de donnes gnr
Lorsque vous avez cr un module de donnes laide du modeleur de
donnes, vous pouvez lutiliser dans les applications que vous crivez.
Suivez ces tapes :
1 Excutez lexpert Utilisation dun module de donnes.
Il ajoute, dans le code source du cadre de votre application, une
mthode setModule() identifiant le module de donnes. La mthode
setModule() cre par lexpert appelle la mthode jbInit() du cadre.
Lexpert supprime galement lappel de jbInit() dans le constructeur
du cadre. Le fichier cadre doit tre ouvert dans le volet contenu.
2 Dans le code source du fichier de votre application, appelez la mthode
setModule() du cadre, en lui transmettant la classe du module de
donnes.
Supposons, par exemple, que vous avez utilis le modeleur de donnes
pour crer un module de donnes appel CountryDataModelModule. Pour
accder la logique stocke dans ce module de donnes depuis
lapplication que vous crivez, vous devez ajouter une mthode
setModule() la classe de votre cadre.
Pour ajouter la mthode setModule() et supprimer lappel de la mthode
jbInit() dans le constructeur de la classe,
1 Ajoutez le module de donnes la liste des bibliothques ncessaires
(dans la bote de dialogue Projet|Proprits du projet).
2 Choisissez Experts|Utiliser un module de donnes alors que le code
source du cadre est visible dans lditeur.
3 Spcifiez le module de donnes utiliser avec lexpert.
4 Slectionnez loption Lapplication dfinit linstance en appelant
setModule().
5 Cliquez sur OK.
Le code obtenu pour le cadre doit avoir laspect suivant :
package com.borland.samples.dx.myapplication;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//importe le paquet o se trouve le module de donnes
import com.borland.samples.dx.datamodule.*;
public class Cadre1 extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
CountryDataModelModule countryDataModelModule1;
//Construit le cadre sans appeler jbInit()
public Cadre1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
}
//Initialisation du composant
U t i l i s a t i o n d e s m o d u l e s d e d o n n e s p o u r s i m p l i f i e r l a c c s a u x d o n n e s 10-23
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Titre du cadre");
}
//Redfinition pour pouvoir quitter la fermeture du systme
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
// Lexpert Utilisation dun module de donnes a ajout le code suivant
public void setModule(CountryDataModelModule countryDataModelModule1) {
this.countryDataModelModule1 = countryDataModelModule1;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Remarquez comment la mthode jbInit() du cadre est maintenant
appele aprs la dfinition du module et non dans le constructeur.
Vous devez ensuite appeler la nouvelle mthode setModule() dans le code
source principal de votre application. Dans le constructeur de
lapplication, appelez setModule() en lui transmettant la classe du module
de donnes. Le code de lapplication principale doit avoir laspect
suivant :
package com.borland.samples.dx.myapplication;
import javax.swing.UIManager;
public class Application1 {
boolean packFrame = false;
//Construit lapplication
public Application1() {
Cadre1 frame = new Cadre1();
// Voici la ligne de code que vous devez ajouter
frame.setModule(new sans_titre3.CountryDataModelModule());
//Valider les cadres ayant des tailles prdfinies
//Regroupe les cadres ayant des infos utilisables sur la taille prfre,
//par exemple par leur disposition
if (packFrame)
frame.pack();
else
frame.validate();
frame.setVisible(true);
}
//Mthode principale
10-24 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e m o d u l e s d e d o n n e s e n u t i l i s a n t l e m o d e l e u r d e d o n n e s
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
}
new Application1();
}
}
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-1
C h a p i t r e
11
Chapitre11Filtrage, tri et recherche
de donnes
Dans une application, une fois acheve la phase dacquisition des
donnes, les donnes sont places dans le composant ensemble de
donnes appropri du paquet DataExpress. Il reste alors dfinir les
fonctions standard de lapplication et son interface utilisateur. Ce chapitre
prsente les caractristiques de filtrage, tri et recherche de donnes que
propose gnralement une application de base de donnes.
Un des principes fondamentaux du paquet DataExpress est que la
manipulation des donnes est indpendante de la manire dobtenir ces
donnes. Quel que soit le type de composant ensemble de donnes utilis
pour obtenir les donnes, il est manipul et connect aux contrles de la
mme manire. La plupart des exemples de ce chapitre utilisent le
composant QueryDataSet, mais vous pouvez le remplacer par le composant
TableDataSet ou toute autre sous-classe de StorageDataSet sans avoir
modifier le code dans la partie principale de lapplication.
Tous les exemples exposs dans ce chapitre sont crs en utilisant
lAppBrowser JBuilder et les outils de conception. Chaque fois que cest
possible, ces outils sont utiliss pour gnrer le code source Java. Quand
cela savre ncessaire, vous apprendrez modifier le code pour que
lapplication effectue une action particulire.
Les informations prsentes dans ce chapitre supposent que vous
connaissez suffisamment lutilisation de lenvironnement de JBuilder. Les
tapes dtailles sur la faon dutiliser linterface utilisateur ne sont pas
mentionnes. Si JBuilder ne vous est pas familier, reportez-vous au
Chapitre 16, Tutoriel : Importation et exportation des donnes
dun fichier texte, Utilisation de lAppBrowser dans Introduction
JBuilder ou Introduction au concepteur dans Conception dapplications
avec JBuilder.
11-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A c c s a u x d o n n e s d e s e x e m p l e s
Tous le matriel mis en uvre dans ce chapitre ncessite laccs aux
donnes SQL stockes dans une base de donnes locale. Pour des
instructions sur linstallation et la configuration de JBuilder pour utiliser
le pilote JDataStore exemple, voir Ajout dun pilote JDBC JBuilder,
page 4-10.
Il est conseill dutiliser les exemples comme guide pour ajouter des
fonctions votre application. Des projets complets et des fichiers source
Java, comprenant des commentaires lorsque cest ncessaire, sont fournis
pour la plupart des concepts prsents dans ce chapitre. Tous les fichiers
rfrencs par ces exemples se trouvent dans le rpertoire des exemples de
JBuilder.
Pour crer une application de base de donnes, vous devez tout dabord la
connecter une base de donnes et alimenter en donnes un ensemble de
donnes. Accs aux donnes des exemples, page 11-2, dfinit une
requte qui peut tre utilise pour certains des exemples contenus dans ce
chapitre. Les options de base de donnes de la liste suivante (filtre, tri,
recherche de donnes) peuvent sutiliser dans diverses combinaisons,
vous pouvez ainsi choisir de masquer, temporairement, tous les employs
dont le nom commence par une lettre comprise entre M et Z. Vous
pouvez galement trier les employs visibles par ordre alphabtique des
prnoms.
Le filtrage masque temporairement des lignes dans un ensemble de
donnes.
Le tri modifie lordre dun ensemble de donnes filtr ou non filtr.
La recherche positionne le curseur dans lensemble de donnes filtr
ou non filtr.
Accs aux donnes des exemples
Cette section donne les tapes ncessaires pour configurer une application
de base de donnes simple qui peut tre utilise dans les exemples de ce
chapitre. La requte utilise dans ces exemples est :
SELECT * FROM EMPLOYEE
Cette instruction SQL slectionne toutes les colonnes dune table nomme
EMPLOYEE, incluse dans la base de donnes JDataStore exemple
(employee.jds).
Pour configurer une application afin de pouvoir lutiliser avec les
exemples,
1 Fermez tous les projets ouverts (choisissez Fichier|Fermer le projet).
2 Choisissez Fichier|Nouveau projet.
3 Entrez le nom et lemplacement du projet dans lexpert projet. Cliquez
sur Terminer.
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-3
A c c s a u x d o n n e s d e s e x e m p l e s
4 Choisissez Fichier|Nouveau dans le menu et double-cliquez sur licne
Application dans la page Gnral de la galerie dobjets.
5 Spcifiez le nom du paquet et le nom de la classe dans lexpert
application. Cliquez sur Terminer.
6 Slectionnez longlet Conception pour activer le concepteur dinterface
utilisateur.
7 Cliquez sur le composant Database de longlet Data Express dans la
palette des composants, puis cliquez dans larborescence des
composants ou le concepteur dinterface utilisateur pour ajouter le
composant lapplication.
8 Ouvrez lditeur de la proprit connection du composant Database en le
slectionnant, puis en cliquant sur les points de suspension (...) de la
proprit connection dans linspecteur. Dfinissez les proprits de
connexion pour la table employee du JDataStore exemple, comme suit.
La connexion URL pointe sur un emplacement dinstallation
particulier. Si vous avez install JBuilder dans un autre rpertoire,
pointez sur lemplacement de votre installation.
La bote de dialogue connection contient un bouton Tester la connexion.
Cliquez sur ce bouton pour vrifier que les proprits de connexion
sont correctement dfinies. Le rsultat de la tentative de connexion est
affich dans la zone dtat. Quand la connexion russit, cliquez sur OK.
Si la connexion choue, vrifiez que vous avez bien suivi toutes les
tapes du Chapitre 4, Connexion une base de donnes.
9 Ajoutez un composant QueryDataSet au concepteur en cliquant sur le
composant QueryDataSet de longlet DataExpress puis en cliquant dans
larborescence des composants ou dans linterface utilisateur.
Dans linspecteur, slectionnez la proprit query du composant
QueryDataSet, cliquez sur les points de suspension pour ouvrir le
dialogue QueryDescriptor et dfinissez les proprits de la manire
suivante :
Nom de la proprit Valeur
Pilote com.borland.datastore.jdbc.DataStoreDriver
URL Naviguez jusqu votre copie locale de <jbuilder>/
samples/JDataStore/datastores/employee.jds
Nom dutilisateur Entrez votre nom
Mot de passe non obligatoire
Nom de la proprit Valeur
Base de donnes database1
Instruction SQL SELECT * FROM EMPLOYEE
11-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A c c s a u x d o n n e s d e s e x e m p l e s
Cliquez sur Tester la requte pour vrifier quelle peut tre excute. Si
la zone dtat indique Succs, choisissez OK pour fermer la bote de
dialogue.
10 Ajoutez un composant DBDisposeMonitor de la page dbSwing
supplmentaires. Le DBDisposeMonitor fermera le JDataStore lorsque la
fentre sera ferme.
11 Dfinissez la proprit dataAwareComponentContainer du DBDisposeMonitor
par this.
Pour visualiser les donnes dans votre application, ajoutez les composants
dinterface utilisateur suivants et liez-les lensemble de donnes :
1 Slectionnez contentPane(BorderLayout) dans larborescence des
composants et dfinissez sa proprit layout par null.
2 Placez un JdbNavToolBar dans la zone situe au dessus du panneau dans
le concepteur dinterface utilisateur. jdbNavToolBar1 sattache lui-mme
automatiquement au DataSet qui dtient la focalisation, de sorte quil
nest pas ncessaire de dfinir sa proprit dataSet.
3 Placez un JdbStatusLabel dans la zone situe en bas du panneau dans le
concepteur dinterface utilisateur. jdbStatusLabel1 sattache lui-mme
automatiquement au DataSet qui dtient la focalisation, de sorte quil
nest pas ncessaire de dfinir sa proprit dataSet.
4 A partir de longlet dbSwing, ajoutez un TableScrollPane au centre du
panneau dans le concepteur dinterface utilisateur.
5 Placez un JdbTable au centre du tableScrollPane1 et dfinissez sa
proprit dataSet par queryDataSet1.
Vous remarquerez qu ce stade, le concepteur affiche des donnes
relles.
Remarque Pour que lapplication saffiche correctement lors de lexcution, vous
aurez peut-tre positionner et redimensionner des composants dans
le concepteur.
6 Choisissez Excuter|Excuter le projet pour excuter lapplication et
parcourir lensemble de donnes.
Lensemble de donnes EMPLOYEE contient 42 enregistrements et 11
champs. Dans le libell dtat de cette application, vous verrez le nombre
denregistrements affichs. La premire fois que lapplication sera
excute, le libell dtat indiquera Enregistrement 1 sur 42. Certains
exemples supprimeront des lignes de laffichage. Le libell dtat
montrera le nombre de lignes lues dans lensemble de donnes chaque
application.
Pour davantage dinformations sur laccs de lapplication aux donnes,
voir Chapitre 5, Extraction des donnes dune source de donnes.
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-5
F i l t r a g e d e s d o n n e s
Lexcution de cette application doit donner le rsultat suivant :
Figure 11.1 Excution des applications de bases de donnes
Filtrage des donnes
Le filtrage masque temporairement des lignes de lensemble de donnes
ce qui permet de slectionner, visualiser et travailler sur un sous-ensemble
des lignes dun ensemble de donnes. Vous pouvez souhaiter visualiser
toutes les commandes dun client, tous les clients situs hors de France ou
toutes les commandes non livres dans un dlai de 48 heures. Au lieu
dexcuter une nouvelle requte chaque fois que votre critre change,
vous pouvez utiliser un filtre pour afficher une nouvelle vue.
Dans JBuilder, le filtrage est spcifi par du code que lensemble de
donnes appelle via un vnement pour chaque ligne de donnes afin de
dterminer sil faut ou non linclure dans la vue en cours. A chaque fois
que la mthode est appele, elle doit examiner la ligne qui lui est
transmise et indiquer si la ligne doit tre ou non incluse dans la vue.
La mthode indique cela en appelant les mthodes add() ou ignore() pour
un objet RowFilterResponse qui lui est transmis.
Ce code doit tre attach lvnement filterRow dun ensemble de
donnes en utilisant la page Evnements de linspecteur. Quand vous
ouvrez lensemble de donnes, ou quand il est ouvert implicitement en
excutant un cadre contenant un contrle li cet ensemble de donnes,
le filtre est appliqu. Dans lexemple de cette section, des composants
dinterface utilisateur permettent lutilisateur de redfinir
dynamiquement un nouveau filtre.
Un filtre appliqu un ensemble de donnes est un mcanisme
permettant de restreindre les lignes de donnes visibles. Lensemble de
donnes sous-jacent nest pas modifi, seule la vue en cours des donnes
est change et cette vue est transitoire. Une application peut changer
dynamiquement les enregistrements appartenant la vue en rponse
11-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
F i l t r a g e d e s d o n n e s
une demande de lutilisateur (comme dans lexemple ci-dessous) ou en
fonction de la logique de lapplication (par exemple, en affichant toutes les
lignes devant tre supprimes avant denregistrer les modifications, afin
de confirmer ou dannuler lopration). Quand vous utilisez une vue
filtre des donnes et validez une modification ne satisfaisant pas aux
spcifications de filtre, la ligne disparat de la vue mais reste dans
lensemble de donnes.
Il est possible dutiliser simultanment plusieurs vues des mmes donnes
en utilisant des composants DataSetView. Pour davantage dinformations
sur lutilisation de vues multiples dun mme ensemble de donnes, voir
Prsentation de plusieurs vues des donnes, page 12-23.
Le filtrage est parfois confondu avec le tri et la recherche.
Le filtrage masque temporairement des lignes dans un ensemble de
donnes.
Le tri modifie lordre dun ensemble de donnes filtr ou non filtr.
Pour davantage dinformations sur le tri des donnes, voir Tri des
donnes, page 11-9.
La recherche positionne le curseur dans lensemble de donnes filtr ou
non filtr. Pour davantage dinformations sur la recherche de donnes,
voir Recherche de donnes, page 11-14.
Ajout et suppression de filtres
Cette section dcrit comment utiliser lauditeur RowFilterListener dun
ensemble de donnes pour ne visualiser que les lignes vrifiant le critre
de filtre. Dans cet exemple, nous crons un JdbTextField permettant
lutilisateur de spcifier la colonne filtrer. Ensuite, nous crons un autre
JdbTextField permettant lutilisateur de spcifier la valeur que doit
contenir cette colonne pour que lenregistrement soit affich par la vue.
Nous ajoutons galement un bouton JButton permettant lutilisateur de
dcider quand appliquer le critre de filtre et ne montrer que les lignes
dont la colonne spcifie contient la valeur spcifie.
Ce tutoriel utilise un composant QueryDataSet connect un composant
Database pour lire les donnes, mais le filtrage peut sappliquer tout
composant DataSet.
Lexemple termin est disponible sous la forme dun projet dans le
sous-rpertoire /samples/DataExpress/FilterRows de votre installation de
JBuilder.
Pour crer cette application,
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2. Cette tape permet de vous
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-7
F i l t r a g e d e s d o n n e s
connecter une base de donnes, de lire les donnes dune table, de
voir et de modifier ces donnes dans un composant orient donnes.
2 Cliquez sur longlet Conception.
3 Ajoutez deux composants JdbTextField partir de la page dbSwing et
un composant JButton partir de la page Swing. Les composants
JdbTextField vous permettent de saisir un nom de champ et une valeur
de filtre, le composant JButton excutant le mcanisme de filtre. Le
composant JButton excute le mcanisme de filtre.
4 Dfinissez le nom de la colonne filtrer et de son formateur.
Slectionnez le longlet Source et ajoutez les instructions import
suivantes aux instructions import existantes :
import com.borland.dx.text.VariantFormatter;
5 Ajoutez les dfinitions de variables suivantes aux dfinitions de
variables existantes dans la dfinition de classe :
Variant v = new Variant();
String columnName = "Last_Name";
String columnValue = "Young";
VariantFormatter formatter;
6 Spcifiez le mcanisme de filtre.
Il faut restreindre les lignes incluses dans la vue en ajoutant un
RowFilterListener et en lutilisant pour dfinir les lignes qui doivent tre
affiches. Laction par dfaut dun RowFilterListener consiste exclure
la ligne. Votre code doit donc appeler la mthode add() de
RowFilterResponse pour chaque ligne qui doit tre incluse dans la vue.
Remarquez que, dans cet exemple, nous vrifions si les champs
columnName et columnValue sont vierges. Si un champ est vierge, toutes les
lignes sont ajoutes la vue en cours.
Pour crer le RowFilterListener comme adaptateur dvnement en
utilisant les outils de conception visuelle,
a Slectionnez longlet Conception.
b Slectionnez le composant queryDataSet1 dans larborescence des
composants.
c Slectionnez longlet Evnements de linspecteur.
d Slectionnez lvnement filterRow.
e Double-cliquez dans la zone de valeur filterRow.
Un RowFilterListener est automatiquement gnr en tant que classe
inner. Il appelle une nouvelle mthode de votre classe appele
queryDataSet1_filterRow.
f Ajoutez le code de filtrage lvnement queryDataSet1_filterRow.
Vous pouvez copier le code de laide en ligne en slectionnant le
11-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
F i l t r a g e d e s d o n n e s
code puis en choisissant le bouton Copier (ou en utilisant Ctrl+C ou
Edition|Copier dans le Visualiseur daide) :
void queryDataSet1_filterRow(ReadRow row, RowFilterResponse
response) {
try {
if (formatter == null || columnName == null ||
columnValue == null || columnName.length() == 0 ||
columnValue.length() == 0)
//lutilisateur a laiss le champ vide ; ajouter toutes les lignes
response.add();
else {
row.getVariant(columnName, v);
//lire la valeur de la colonne pour la ligne
// la formater en chane
String s = formatter.format(v);
// si vrai afficher cette ligne
if (columnValue.equals(s))
response.add();
else response.ignore();
}
}
catch(Exception e) {
System.err.println("Echec de lexemple de filtre");
}
}
7 Redfinissez lvnement actionPerformed pour le bouton JButton afin
dappliquer effectivement le filtrage des donnes. Pour ce faire,
a Slectionnez longlet Conception.
b Slectionnez le JButton dans larborescence des composants.
c Cliquez sur longlet Evnements de linspecteur.
d Slectionnez lvnement actionPerformed et double-cliquez sur la
zone de valeur pour cet vnement.
Longlet source affiche le squelette de la mthode
jButton1_actionPerformed. Le code suivant ralise le filtrage des
donnes en dtachant et rattachant ladaptateur dvnement
rowFilterListener qui a t gnr ltape prcdente.
e Ajoutez ce code au stub gnr.
void jButton1_actionPerformed(ActionEvent e) {
try {
// Obtient les nouvelles valeurs des variables utilises par le filtre.
// Puis rapplique le filtre lensemble de donnes.
columnName = jdbTextField1.getText();
columnValue = jdbTextField2.getText();
Column column = queryDataSet1.getColumn(columnName);
formatter = column.getFormatter();
// Dclenche un recalcul du filtre.
queryDataSet1.refilter();
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-9
T r i d e s d o n n e s
// La table ne doit maintenant redessiner que les lignes
// respectant ces critres
}
catch (Exception ex) {
System.err.println("Echec de lexemple de filtre");
}
}
8 Compilez et excutez lapplication.
Lapplication en train de sexcuter ressemble ceci :
Figure 11.2 Application excutant des filtres
Pour tester cette application,
1 Entrez le nom de la colonne sur laquelle filtrer (par exemple,
Last_Name) dans le premier contrle JdbTextField.
2 Entrez la valeur du filtre dans lautre contrle JdbTextField (par
exemple, Young).
3 Cliquez sur le JButton.
Remarque Le filtre est annul et toutes les lignes sont affiches si le nom de la
colonne ou la valeur est laiss vide.
Tri des donnes
Le tri dun ensemble de donnes dfinit un index qui permet laffichage
des donnes dans lordre de tri sans effectivement retrier les lignes dans la
table du serveur.
Il est possible de trier les ensembles de donnes selon plusieurs colonnes.
Quand un tri est dfini selon plusieurs colonnes, lensemble de donnes
est tri comme suit :
Dabord sur la premire colonne dfinie dans le tri.
La deuxime colonne dfinie dans le tri intervient si la premire
colonne contient des doublons.
11-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
T r i d e s d o n n e s
La colonne suivante intervient si les deux premires colonnes
contiennent des doublons, et ainsi de suite.
Sil reste encore des doublons aprs la dernire colonne du tri, les lignes
saffichent dans lordre o elles existent dans la table du serveur.
Sil reste encore des rptitions aprs la dernire colonne du tri, les
colonnes saffichent dans lordre o elles existent dans la table du
serveur.
Il est possible de trier les donnes dans toute sous-classe de DataSet,
y compris les composants QueryDataSet, ProcedureDataSet, TableDataSet et
DataSetView. Quand les donnes sont tries :
La diffrenciation majuscules/minuscules ne sapplique quau tri de
donnes de type String.
La diffrenciation majuscules/minuscules sapplique toutes les
colonnes String dun tri multicolonne.
Les directions de tri (ascendant/descendant) sont dfinies colonne par
colonne.
Les valeurs null sont places au dbut dans un tri descendant et la fin
dans un tri ascendant.
Le tri et lindexation sont intimement lis. Pour davantage dinformations
sur les index, voir Tri et indexation, page 11-12.
Tri des donnes dans un composant JdbTable
Si votre application inclut un composant JdbTable associ un DataSet,
vous pouvez, dans lapplication qui sexcute, trier selon une seule
colonne en cliquant dans len-tte de la colonne. Cliquez nouveau dans
len-tte pour passer dun tri ascendant un tri descendant.
Figure 11.3 Cliquez sur len-tte de la colonne pour effectuer un tri lexcution
En procdant ainsi, il nest possible que de trier selon une seule colonne.
Si vous cliquez sur un autre en-tte de colonne, vous remplacez le tri
existant par un nouveau.
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-11
T r i d e s d o n n e s
Tri des donnes en utilisant les outils de conception
visuelle de JBuilder
Si lapplication doit trier les donnes dans un ordre spcifique, les outils
de conception visuelle de JBuilder permettent de dfinir simplement ces
proprits. La proprit sort de DataSet permet de :
Visualiser les colonnes dfinissant actuellement lordre de tri.
Slectionner les colonnes de lensemble de donnes utilisables dans
le tri.
Ajouter ou de retirer des colonnes slectionnes dans la spcification
de tri.
Spcifier la diffrenciation majuscules/minuscules dans le tri.
Spcifier si le tri est ascendant ou descendant colonne par colonne.
Dfinir des contraintes de tri unique afin de ne pouvoir ajouter ou
modifier que les colonnes contenant des valeurs uniques de cl dun
DataSet.
Crer un index rutilisable pour une table.
Cet exemple dcrit comment trier les donnes dun ensemble de donnes
par ordre croissant de nom. Pour dfinir les proprits de tri avec les
outils de conception visuelle de JBuilder, procdez de la manire
suivante :
1 Ouvrez ou crez le projet laide des instructions de la section Accs
aux donnes des exemples, page 11-2.
2 Cliquez sur longlet Conception. Slectionnez le QueryDataSet dans le
volet contenu.
3 Dans linspecteur, slectionnez puis double-cliquez sur la zone ct
de la proprit sort. Lditeur de la proprit sort saffiche.
4 Spcifiez les valeurs des options affectant lordre de tri des donnes.
Dans ce cas, slectionnez le champ LAST_NAME dans la liste Colonnes
disponibles et choisissez Ajouter au tri.
5 Si vous slectionnez la mauvaise colonne, cliquez sur le bouton Retirer
du tri et recommencez ltape prcdente.
11-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
T r i d e s d o n n e s
La bote de dialogue ressemble ceci :
Figure 11.4 Editeur de la proprit Sort
6 Cliquez sur le bouton OK.
Les valeurs des proprits spcifies dans la bote de dialogue sont
stockes dans un objet SortDescriptor.
7 Choisissez Excuter|Excuter le projet pour compiler et excuter
lapplication. Lapplication doit avoir laspect suivant :
Figure 11.5 Application trie lexcution
Tri et indexation
Deux options de la bote de dialogue Sort ncessitent davantage
dexplications : Unique et Index. Le tri et lindexation sont troitement
lis. Voici une description dtaille de loption Unique et des index
nomms.
Unique
Cochez loption Unique pour crer un index unique qui met en place une
contrainte sur les donnes dun StorageDataSet. Avec cette contrainte,
seules les lignes ayant des valeurs uniques pour les colonnes dfinies
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-13
T r i d e s d o n n e s
comme sortKeys dans le SortDescriptor peuvent tre ajoutes ou mises
jour dans un ensemble de donnes.
Loption Unique est pratique lors de linterrogation de donnes
provenant dune table dun serveur ayant un index unique. Avant que
lutilisateur ne commence modifier les donnes, il est possible de
dfinir un index unique pour les colonnes qui sont indexes sur le
serveur en sachant quil ny aura pas de doublons. Ainsi, lutilisateur ne
peut pas crer de lignes qui seraient rejetes comme doublons lors de la
sauvegarde sur le serveur.
Si un index unique trie sur plusieurs colonnes, la contrainte porte sur
les colonnes prises comme un tout : deux lignes peuvent contenir la
mme valeur dans une des colonnes du tri, mais il ne peut pas y avoir
deux lignes contenant les mmes valeurs pour chacune des colonnes du
tri.
Unique est une contrainte sur lensemble de donnes, et non pas
seulement sur lindex. Si vous dfinissez un index unique sur une
colonne, vous affirmez quil nexiste pas deux lignes de lensemble de
donnes ayant la mme valeur dans cette colonne. Si plusieurs lignes
de lensemble de donnes ont la mme valeur dans la colonne unique
la premire cration de lindex, toutes les lignes ne respectant pas la
contrainte dunicit sont copies vers un DataSet spar. Vous pouvez
accder ce DataSet en appelant la mthode
StorageDataSet.getDuplicates(). Vous pouvez supprimer le DataSet des
doublons en appelant la mthode StorageDataSet.deleteDuplicates().
Il est possible de dfinir en mme temps plusieurs paramtres dunicit
dans la proprit sort dun StorageDataSet. Sil existe dj un DataSet des
doublons pour une prcdente dfinition dunicit dans la proprit
sort, il nest pas possible de dfinir dautres paramtres dunicit pour
la proprit sort tant que les doublons dj existants nont pas t
supprims. Cette rgle est dfinie pour empcher la suppression
involontaire de lignes de donnes correctes la suite dune dfinition
incorrecte de la proprit sort.
Nom dindex
Entrez un nom dans le champ Nom dindex pour crer un index nomm.
Il sagit du nom indiqu par lutilisateur associer aux spcifications de tri
(index) en cours de dfinition dans lditeur de la proprit Sort. Le rle
dun index nomm est de permettre le retour un tri prcdemment
dfini.
Lindex a t prserv (tenu jour) afin dtre rutilis. Cela signifie que
lindex est actualis afin de reflter les ajouts, suppressions et
modifications effectus dans la ou les colonnes de tri. Si, par exemple,
vous dfinissez un tri unique sur la colonne NumClient de votre ensemble
de donnes Clients, mme si vous dcidez de visualiser les donnes par
11-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R e c h e r c h e d e d o n n e s
ordre de code postal et dfinissez lordre de tri correspondant, vous ne
pouvez toujours pas crer un client dont le NumClient serait en double.
Un index nomm implmente les ordres de tri (donc les index) et la
contrainte dunicit reste applique mme si vous arrtez de visualiser les
donnes dans cet ordre.
Pour utiliser un ensemble de donnes dans lordre dfini par un nom
dindex existant, initialisez sa proprit sort laide du constructeur
sortDescriptor qui accepte seulement un nom dindex. Si vous dfinissez
dans la proprit sort dun ensemble de donnes un nouveau
sortDescriptor utilisant exactement les mmes paramtres quun tri
existant, celui-ci est utilis.
Codage du tri
Vous pouvez galement coder le tri manuellement ou utiliser les outils de
conception visuelle de JBuilder pour gnrer le code afin dinstancier un
objet SortDescriptor. Le code gnr automatiquement par les outils de
conception visuelle de JBuilder a laspect suivant :
queryDataSet1.setSort(new com.borland.dx.dataset.SortDescriptor("",
new String[] {"LAST_NAME", "FIRST_NAME", "EMP_NO"}, new boolean[]
{false, false, false, }, true, false, null));
Dans ce segment de code, le sortDescriptor est instanci pour trier les
employs selon leur nom et leur prnom (LAST_NAME et
FIRST_NAME), puis leur numro (EMP_NO) est utilis comme
sparateur dans le cas demploys portant le mme nom. Le tri seffectue
en ordre ascendant en ne tenant pas compte de la diffrenciation
majuscule/minuscule.
Pour revenir une vue non trie des donnes, fermez lensemble de
donnes et initialisez la proprit setSort null, comme suit : Les donnes
seront ensuite affiches dans lordre o elles ont t ajoutes la table.
queryDataSet1.setSort(null);
Recherche de donnes
Rechercher des donnes est une fonction lmentaire des applications de
donnes. Cette rubrique prsente les deux types de recherche suivants :
La recherche interactive en utilisant un composant JdbNavField dans
laquelle lutilisateur peut saisir les valeurs rechercher lors de
lexcution de lapplication.
La recherche de valeurs dfinies par programmation.
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-15
R e c h e r c h e d e d o n n e s
Recherche de donnes avec le composant JdbNavField
La bibliothque dbSwing contient un composant JdbNavField qui propose
des fonctionnalits de recherche dans un contrle dinterface utilisateur.
Le composant JdbNavField offre une fonction de recherche incrmentale
pour les colonnes de type String. Sa proprit columnName spcifie la
colonne o seffectue la recherche. Si cette proprit nest pas dfinie, la
recherche est effectue sur la dernire colonne visite dans JdbTable.
Si vous incorporez un composant JdbStatusLabel dans une application, les
messages du composant JdbNavField sont affichs dans le libell dtat.
Le rpertoire /samples/DataExpress/LocatingData de votre installation
JBuilder contient lexemple termin dune application utilisant un
JdbNavField dont le nom de projet est LocatingData.jpx. Cet exemple montre
comment dfinir une colonne pour lopration de localisation et comment
utiliser un composant JdbComboBox pour permettre lutilisateur de
slectionner la colonne o localiser une valeur. Une fois acheve,
lapplication a laspect suivant :
Figure 11.6 Exemple dapplication utilisant JdbNavField
Pour crer cette application,
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2.
Cette tape vous permet de vous connecter une base de donnes, de
lire les donnes dune table, de voir et de modifier ces donnes dans un
composant orient donnes. Consultez la capture cran de lapplication
en cours dexcution ci-dessus pour dterminer lemplacement
approximatif des composants.
2 Ajoutez un JdbNavField au concepteur dinterface utilisateur partir de
la page DbSwing supplmentaires de la palette de composants et
dfinissez sa proprit dataSet par queryDataSet1.
3 Ajoutez un JdbComboBox au concepteur dinterface utilisateur partir de
la page dbSwing de la palette de composants.
11-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R e c h e r c h e d e d o n n e s
4 Initialisez la proprit items de jdbComboBox1 avec les valeurs des noms
de colonnes EMP_NO, FIRST_NAME et LAST_NAME.
5 Slectionnez longlet Evnements de linspecteur. Slectionnez
lvnement itemStateChanged() de jdbComboBox1, et double-cliquez sur
son champ de valeur. Un stub pour lvnement itemStateChanged() est
ajout au source. Le positionnement du curseur permet dinsrer le
code suivant, qui offre lutilisateur la possibilit de spcifier la
colonne dans laquelle rechercher les donnes.
void jdbComboBox1_itemStateChanged(ItemEvent e) {
jdbNavField1.setColumnName(jdbComboBox1.getSelectedItem().toString());
jdbNavField1.requestFocus();
}
Ce code teste si une modification est intervenue dans JdbComboBox. Sil
dtermine quune autre valeur de colonne est slectionne, la proprit
columnName du JdbNavField prend pour valeur la colonne nomme dans le
JdbComboBox. Cela indique au JdbNavField deffectuer les recherches dans
la colonne spcifie (Column). La focalisation est ensuite attribue au
JdbNavField pour la saisie de la valeur rechercher.
6 Ajoutez un composant JdbTextArea partir de la page dbSwing.
Placez le composant JdbTextArea ct du composant JdbComboBox dans
le concepteur dinterface utilisateur. Initialisez sa proprit text pour
indiquer lutilisateur quil peut slectionner une colonne dans
laquelle rechercher des donnes, par exemple : Slectionnez la colonne
dans laquelle effectuer la recherche. Entrez ensuite la valeur
rechercher. Observez les instructions de recherche affiches dans la
barre dtat.
Si, par contre vous ne voulez rechercher que dans une colonne donne
(Column), vous pouvez affecter la proprit columnName du composant
JdbNavField la colonne du DataSet dans laquelle vous voulez rechercher
des donnes, par exemple, LAST_NAME.
7 Ajoutez un composant JdbLabel partir de la page dbSwing. Placez-le
ct de jdbNavField1. Initialisez sa proprit text : Valeur localiser.
Remarque Voir plus haut, dans lcran de lapplication en cours dexcution, le
texte des autres instructions.
8 Excutez lapplication.
Le libell dtat est mis jour pour reflter ltat courant de
lapplication. Par exemple,
Slectionnez dans le composant JdbComboBox le nom de colonne dans
laquelle rechercher. La zone dtat affiche "Entrez une valeur puis
appuyez sur la touche Entre pour commencer la recherche".
Commencez saisir la valeur rechercher dans le composant
JdbNavField. Si la recherche est effectue dans une colonne String, au
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-17
R e c h e r c h e d e d o n n e s
fur et mesure de la saisie, remarquez comment le JdbNavField
effectue une recherche incrmentale sur les caractres dj saisis.
Pour tous les autres types de donnes, appuyez sur Entre pour
effectuer la recherche. Si aucune valeur nest trouve dans la table, la
zone dtat affiche Impossible de trouver une valeur de colonne
correspondante.
Appuyez sur les touches Haut ou Bas pour, respectivement,
rechercher en arrire ou en avant. Lorsquune valeur
correspondante est trouve, la zone dtat affiche Valeur trouve.
Appuyez sur les flches haut/bas pour les autres correspondances.
Recherche de donnes par programme
Cette section prsente la manire de rechercher des donnes par code ainsi
que les conditions affectant les recherches.
Pour effectuer une recherche par programme,
1 Instanciez un DataRow bas sur lensemble de donnes dans lequel
rechercher. Si vous ne voulez pas rechercher dans toutes les colonnes
du DataSet, crez un DataRow restreint (un DataRow ne contenant que les
colonnes pour lesquelles vous voulez spcifier des valeurs de
recherche). (Voir Recherche de donnes au moyen dun DataRow,
page 11-18.)
2 Affectez les valeurs rechercher aux colonnes appropries du DataRow.
3 Appelez la mthode locate(ReadRow, int) en spcifiant les options de
recherche voulues avec le paramtre int. Testez la valeur renvoye
pour dterminer si la recherche a russi ou chou.
4 Pour trouver dautres occurrences, appelez de nouveau locate(), en
spcifiant une option de recherche diffrente (par exemple, Locate.NEXT
ou Locate.LAST). Voir le rsum des champs de la classe Locate pour
davantage dinformations sur toutes les options de Locate.
La recherche est effectue en utilisant la mthode locate(ReadRow, int). Le
premier paramtre, ReadRow, est un type de classe abstrait. Vous utilisez
gnralement sa sous-classe instanciable, la classe DataRow. Le second
paramtre reprsente loption de recherche et il est dfini dans le rsum
des champs de la classe Locate. Les champs de classe Locate reprsentent
les options qui vous permettent de contrler o dmarre la recherche et
comment elle fonctionne, par exemple si les majuscules et les minuscules
sont diffrencies. (Pour davantage dinformations sur les options de
locate, voir Utilisation des options de recherche, page 11-18.) Si une
correspondance est trouve, la position de la ligne en cours passe cette
ligne. Tous les composants orients donnes connects au composant
DataSet dans lequel la recherche est effectue se dplacent ensemble sur la
ligne trouve.
11-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R e c h e r c h e d e d o n n e s
La mthode Locate() recherche dans la vue en cours du DataSet. Cela
signifie que les ligne exclues de laffichage par un RowFilterListener ne
sont pas prises en compte dans la recherche.
La vue de lensemble de donnes peut tre trie ou pas, mais, si elle est
trie, la mthode locate() trouve les lignes correspondantes dans lordre
de tri.
Pour rechercher une valeur null dans une colonne dun ensemble de
donnes, incluez la colonne dans le paramtre DataRow de la mthode
locate() sans lui affecter de valeur.
Astuce Si la mthode locate() ne peut trouver de correspondance alors que vous
pensez quelle le devrait, vrifiez sil ny a pas de valeurs null dans
certaines colonnes ; noubliez pas que toutes les colonnes de DataRow font
partie de la recherche. Pour empcher ceci, utilisez un DataRow restreint ne
contenant que les colonnes voulues.
Recherche de donnes au moyen dun DataRow
Un DataRow est similaire un ensemble de donnes en ce quil contient
plusieurs composants Column. Mais il ne contient quune seule ligne de
donnes. Les valeurs rechercher sont spcifies dans le DataRow.
Quand le DataRow est cr partir de lensemble de donnes sur lequel la
recherche est effectue, le DataRow contient les mmes noms de colonne et
types de donnes que le DataSet sur lequel il est bas. Par dfaut, toutes les
colonnes du DataRow sont utilises dans la recherche. Pour exclure certaines
colonnes de la recherche, crez un DataRow restreint ne contenant que les
colonnes spcifies de lensemble de donnes. Un DataRow restreint est cr
en utilisant lun des constructeurs suivants de DataRow :
DataRow(DataSet, String)
DataRow(DataSet, String[])
DataRow et DataSet sont des classes drives de ReadWriteRow. Toutes les deux
hritent des mmes mthodes de manipulation de leur contenu, par
exemple : getInt(String) et setInt(String, int). Il est donc possible
dutiliser les objets DataRow en employant beaucoup des mmes mthodes
que DataSet.
Utilisation des options de recherche
La recherche est contrle en utilisant les options de recherche. Ce sont
des constantes dfinies dans la classe com.borland.dx.dataset.Locate. Il est
possible de combiner les options de recherche en utilisant loprateur
binaire OR ; plusieurs des combinaisons les plus utiles sont dj dfinies
comme constantes. Quatre des options de recherche ( FIRST, NEXT, LAST et
PRIOR) dterminent comment les lignes du DataSet sont recherches. Les
F i l t r a g e , t r i e t r e c h e r c h e d e d o n n e s 11-19
R e c h e r c h e d e d o n n e s
options CASE_INSENSITIVE et PARTIAL) dfinissent comment une valeur est
considre comme correspondante. La constante FAST affecte la
prparation de la recherche.
Il faut spcifier o la recherche commence et dans quel sens les lignes de
lensemble de donnes sont parcourues. Choisissez lune des options
suivantes :
FIRST commence la premire ligne, indpendamment de la position en
cours, et se dplace vers le bas.
LAST commence la dernire ligne et va vers le haut.
NEXT part de la position en cours et se dplace vers le bas.
PRIOR part de la position en cours et va vers le haut.
Si aucune de ces constantes nest spcifie dans les options de recherche,
une exception DataSetException de type NEED_LOCATE_START_OPTION est
dclenche.
Pour trouver toutes les lignes correspondantes dun DataSet, appelez une
fois la mthode locate() avec loption de recherche FIRST. Si une
correspondance est trouve, r-excutez la recherche en utilisant loption
NEXT_FAST et appelez la mthode avec cette option de recherche jusqu ce
quelle renvoie false. Loption FAST spcifie que les valeurs de recherche
nont pas t modifies et quil nest donc pas ncessaire de les relire dans
DataRow. Pour trouver toutes les lignes correspondantes en commenant
par la fin de la vue, utilisez la place les options LAST et PRIOR_FAST.
Loption CASE_INSENSITIVE spcifie que les valeurs chanes sont considres
comme correspondantes mme sil y a des diffrences de
majuscules-minuscules. Il nest pas obligatoire de spcifier si la recherche
est ou non CASE_INSENSITIVE et cela ne sapplique quaux colonnes String ;
cette option nest pas prise en compte pour les autres types de donnes. Si
cette option est utilise dans une recherche multicolonne, la
diffrenciation majuscules-minuscules ne sapplique quaux colonnes
String impliques dans la recherche.
Loption PARTIAL spcifie quune valeur de ligne est considre comme
correspondante si elle commence par les mmes premiers caractres que
la valeur recherche. Il est ainsi possible dutiliser la valeur de recherche
M pour trouver tous les noms commenant par M. Tout comme
loption CASE_INSENSITIVE, il nest pas obligatoire de spcifier loption
PARTIAL qui na de sens que pour la recherche dans les colonnes String.
Les recherches multicolonnes utilisant PARTIAL fonctionnent diffremment
des autres recherches multicolonnes car lordre des colonnes est pris en
compte. Le constructeur dun DataRow restreint multicolonne attend
comme paramtre un tableau de noms de colonne. Il nest pas ncessaire
que ces noms soient numrs dans leur ordre dapparition dans
lensemble de donnes. Puisque loption PARTIAL ne sapplique qu la
11-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
R e c h e r c h e d e d o n n e s
dernire colonne spcifie, la dernire colonne numre dans le tableau
est importante.
Pour quune recherche multicolonne utilisant loption PARTIAL russisse,
une ligne de lensemble de donnes doit correspondre exactement toutes
les colonnes du DataRow sauf la dernire. Si la dernire colonne commence
par la valeur recherche, la mthode russit. Sinon, la mthode choue. Si
la dernire colonne du DataRow nest pas une colonne String, la mthode
locate() dclenche une exception DataSetException de type
PARTIAL_SEARCH_FOR_STRING.
Recherches grant tous les types de donnes
Les donnes stockes dans des composants daccs aux donnes
DataExpress sont stockes dans des objets Variant. Lorsque les donnes
sont affiches, une reprsentation String du variant est utilise. Pour crire
du code effectuant une recherche gnralise grant les colonnes de tout
type de donnes, utilisez lune des mthodes setVariant() ou lune des
mthodes getVariant().
Par exemple, vous souhaitez crire une routine de recherche gnralise
qui accepte une valeur et recherche la ligne du DataSet qui contient cette
valeur. Le mme bloc de code peut fonctionner pour tout type de donnes
puisque les donnes sont reprsentes par un variant. Pour afficher les
donnes, utilisez la classe formateur approprie ou crez votre formateur
personnalis.
Lordre des colonnes dans le DataRow et le DataSet
Alors quune colonne de lensemble de donnes ne peut apparatre quune
seule fois dans le DataRow, lordre des colonnes peut tre diffrent dans un
DataRow restreint et dans le DataSet. Pour certaines recherches, lordre des
colonnes peut jouer un rle. Par exemple, il peut affecter les recherches
multicolonnes si loption PARTIAL est utilise. Pour davantage
dinformations, voir le paragraphe sur les recherches multicolonnes avec
loption PARTIAL, page 11-19.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-1
C h a p i t r e
12
Chapitre12Ajout de fonctionnalits
aux applications de bases
de donnes
Dans une application, une fois acheve la phase dacquisition des
donnes, les donnes sont places dans le composant ensemble de
donnes appropri du paquet DataExpress. Il reste alors dfinir les
fonctions standard de lapplication et son interface utilisateur. Le
Chapitre 11, Filtrage, tri et recherche de donnes, prsente le tri, le
filtrage et la recherche de donnes dans un ensemble de donnes. Ce
chapitre dcrit dautres fonctions standard des applications de bases de
donnes.
Un des principes fondamentaux du paquet DataExpress est lindpendance
entre la manipulation des donnes et la manire dobtenir ces donnes.
Quel que soit le type de composant ensemble de donnes utilis pour
obtenir les donnes, il est manipul et connect aux contrles de la mme
manire. La plupart des exemples de ce chapitre utilisent le composant
QueryDataSet, mais vous pouvez le remplacer par le composant TableDataSet
ou toute autre sous-classe de StorageDataSet sans avoir modifier le code
dans la partie principale de lapplication.
Tous les exemples sont crs en utilisant lAppBrowser et les outils de
conception de JBuilder. A chaque fois que cest possible, ces outils sont
utiliss pour gnrer du code source Java. Quand cela savre ncessaire,
vous apprendrez quel code il faut modifier et comment procder afin
dexcuter une action particulire dans lapplication.
Les exemples et les tutoriels auxquels ce chapitre fait rfrence ncessitent
laccs aux donnes SQL stockes dans un JDataStore local. Des projets
entirement raliss sont fournis dans le rpertoire exemple DataExpress
12-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e r f r e n c e s
de JBuilder (/samples/DataExpress), le code source tant comment quand
cest ncessaire. Il est conseill dutiliser les exemples comme guide pour
ajouter des fonctions votre application.
Pour crer une application de base de donnes, vous devez tout dabord la
connecter une base de donnes et alimenter en donnes un ensemble de
donnes. Les tapes de la connexion une base de donnes sont dcrites
au Chapitre 17, Tutoriel : Cration dune application de base de donnes
lmentaire. Le tutoriel configure une requte utilisable pour les tches
de bases de donnes suivantes :
Cration de rfrences, inclut des informations sur la cration dune
rfrence laide dune liste de slection.
Utilisation de colonnes calcules
Agrgation de donnes avec des champs calculs
Ajout de modles daffichage ou de modification pour formater les
donnes
Prsentation de plusieurs vues des donnes
Garantie de la persistance des donnes
Utilisation de types de donnes variant
Cration de rfrences
Une colonne (Column) peut obtenir ses valeurs de plusieurs faons :
A partir des donnes dune colonne de base de donnes.
A partir du rsultat de limportation dun fichier texte.
A partir du rsultat dun calcul, ce qui inclut les colonnes calcules, les
donnes agrges, les donnes recherches dans un autre ensemble de
donnes ou les donnes slectionnes via une liste de slection.
Cette section dcrit comment fournir des valeurs laide dune liste de
slection lors de la saisie dune nouvelle valeur dans une colonne, et dcrit
galement la cration dune rfrence affichant les valeurs dune autre
colonne.
Saisie de donnes avec une liste de slection
Une liste de slection est utilise pour trouver dans une colonne
appartenant un autre ensemble de donnes la valeur saisir. Ce type
de rfrence peut ainsi prsenter les choix possibles dans une liste
droulante. Ces listes de slection acclrent fortement la saisie des
donnes.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-3
C r a t i o n d e r f r e n c e s
La section suivante dcrit comment crer ( laide des outils de conception
de JBuilder) une liste de slection servant dfinir la valeur dune colonne
partir dune liste de valeurs accessibles dans un autre ensemble de
donnes. Les instructions dcrivent les tapes du rfrencement dune
valeur dans une liste de slection lors de la saisie du pays dun client ou
dun employ. Dans cet exemple, la proprit pickList dune colonne vous
permet de dfinir quelle colonne de quel ensemble de donnes servira
fournir les valeurs de la liste de slection. Les choix seront disponibles
pour la saisie dans une composant visuel, tel une table, lorsque
lapplication sera excute.
Lorsque lapplication est excute, vous pouvez insrer une ligne dans la
table et, lorsque vous saisissez une valeur pour le champ JOB_COUNTRY,
vous pouvez la slectionner dans la liste de slection droulante. Le pays
slectionn est automatiquement insr dans le champ JOB_COUNTRY
de lensemble de donnes EMPLOYEE.
Ajout dun champ liste de slection
Les tapes suivantes dcrivent comment crer une liste de slection pour
dfinir la valeur de la colonne JOB_COUNTRY partir de la liste des pays
de la table COUNTRY. Quand lutilisateur slectionne un pays dans la
liste de slection, la slection effectue est automatiquement crite dans le
champ en cours de la table. Le projet exemple, Picklist.jpx, situ dans le
sous-rpertoire /samples/DataExpress/Picklist de votre installation
JBuilder, est une application acheve qui utilise la liste de slection dcrite
par les tapes ci-dessous.
1 Crez une application de base de donnes simple, comme dcrit dans
Accs aux donnes des exemples, page 11-2.
2 Ajoutez un autre composant QueryDataSet lapplication.
Ce composant constitue la requte utilise pour remplir la liste de
slection.
3 Cliquez sur la proprit query de queryDataSet2, dans linspecteur,
cliquez sur le bouton points de suspension (...) pour ouvrir lditeur
de la proprit Query et dfinissez la proprit comme suit :
4 Cliquez sur Tester la requte. Lorsquelle est russie, cliquez sur OK
pour fermer la bote de dialogue.
5 Dveloppez le composant queryDataSet1 dans larborescence des
composants pour voir toutes les colonnes et slectionnez JOB_COUNTRY.
Option Valeur
Base de donnes database1
Instruction SQL select COUNTRY from COUNTRY
12-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e r f r e n c e s
6 Slectionnez la proprit pickList dans linspecteur, cliquez sur le
bouton points de suspension (...) pour ouvrir lditeur de la proprit
PickList et dfinissez la proprit comme suit :
Cliquez sur OK.
7 Cliquez sur longlet Source et entrez le code suivant aprs lappel
jbInit() :
queryDataSet2.open();
Il permet douvrir queryDataSet2, qui est attach la table
EMPLOYEE_PROJECT. Normalement, un composant visuel orient
donnes tel que JdbTable ouvre automatiquement lensemble de
donnes, mais dans ce cas, aucun composant visuel nest attach cet
ensemble de donnes qui doit donc tre ouvert explicitement.
8 Excutez lapplication en choisissant Excuter|Excuter le projet.
Lorsque lapplication est excute, vous pouvez insrer une ligne dans la
table et, lorsque vous saisissez une valeur pour le champ JOB_COUNTRY,
vous pouvez la slectionner dans la liste de slection droulante. Le pays
slectionn est automatiquement insr dans le champ JOB_COUNTRY
de lensemble de donnes EMPLOYEE.
Suppression dun champ liste de slection
Pour supprimer une liste de slection,
1 Slectionnez la colonne contenant la liste de slection dans
larborescence des composants.
2 Ouvrez lditeur de la proprit PickList en cliquant dans linspecteur
sur les points de suspension (...) de la proprit pickList.
3 Dfinissez le champ Ensemble de donnes PickList/Lookup par
<aucune>, puis cliquez sur OK.
4 Vous pouvez aussi supprimer une liste de slection dans linspecteur
en cliquant avec le bouton droit sur la proprit, puis en choisissant,
dans le menu contextuel, Effacer la valeur de proprit.
Nom de la proprit Valeur
Ensemble de donnes Picklist/Lookup queryDataSet2
queryDataSet2 COUNTRY
Type de donnes STRING
Afficher dans la liste de slection coche
queryDataSet2 JOB_COUNTRY
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-5
C r a t i o n d e r f r e n c e s
Cration dune rfrence en utilisant une colonne calcule
Cette section dcrit comment utiliser un champ de rfrence pour afficher
des valeurs issues dune colonne appartenant un autre ensemble de
donnes.
Ce type de rfrence recherche des valeurs dans la table spcifie et selon
les critres dfinis afin de les afficher en tant qulments de la table en
cours. Pour crer une colonne calcule, vous devez crer un nouvel objet
Column dans le composant StorageDataSet, dfinir de manire approprie
son calcType et programmer le gestionnaire de lvnement calcFields. Les
valeurs de rfrence ne sont visibles que lorsque lapplication fonctionne.
Des colonnes de rfrence peuvent tre dfinies et affiches dans JBuilder
mais elles nexistent que dans lensemble de donnes JBuilder et non dans
la table de la base de donnes o se trouvent les autres donnes de
lensemble. Cependant, ces colonnes de rfrence peuvent tre exportes
dans un fichier texte.
Voici un exemple de rfrencement dun champ dans une table diffrente
pour des besoins daffichage : le rfrencement dun numro darticle afin
dafficher une description dans une ligne de facture, le rfrencement
dun code postal correspondant la ville et au pays spcifis.
La mthode lookup() utilise les critres de recherche spcifis et recherche
la premire ligne correspondant ces critres. Lorsque la ligne est trouve,
les donnes sont renvoyes depuis cette ligne, mais le curseur nest pas
dplac sur cette ligne. La mthode locate() est semblable la mthode
lookup(), la diffrence quelle dplace le curseur sur la premire ligne
correspondant aux critres spcifis. Pour plus dinformations sur la
mthode locate(), voir Recherche de donnes, page 11-14.
La mthode lookup() peut utiliser une ligne de donnes restreinte (une
ligne de donnes ayant moins de colonnes que lensemble de donnes)
pour contenir les valeurs rechercher et les options dfinies dans la classe
Locate pour contrler la recherche. Cette ligne de donnes restreinte ne
contiendra que les colonnes slectionnes et les donnes correspondant au
critre de recherche en cours, sil existe. Avec le rfrencement, vous
rfrencez gnralement des valeurs appartenant une autre table, vous
devrez donc instancier une connexion cette table dans votre application.
Cet exemple dcrit lutilisation dune colonne calcule pour rechercher et
renvoyer le nom dun employ (depuis la table EMPLOYEE) pour un
numro demploy donn de la table EMPLOYEE_PROJECT. Ce type de
champ de rfrence est utilis uniquement pour laffichage. Les donnes
contenues dans cette colonne lexcution ne sont pas stockes car elles
existent dj par ailleurs dans la base de donnes. La structure physique
de la table et les donnes sous-jacentes ne sont en rien modifies. La
colonne de rfrence est par dfaut en lecture seule. La version acheve du
projet peut tre visualise en excutant le projet exemple Lookup.jpx, situ
12-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
C r a t i o n d e r f r e n c e s
dans le sous-rpertoire /samples/DataExpress/Lookup de votre installation
JBuilder.
Pour davantage dinformations sur lutilisation de lvnement calcFields
pour dfinir une colonne calcule, voir Utilisation de colonnes calcules,
page 12-8.
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2.
Cette tape vous permet de vous connecter une base de donnes, de
lire les donnes dune table, de voir et de modifier ces donnes dans un
composant orient donnes.
2 Ajoutez un autre composant QueryDataSet lapplication.
Cest lui qui fournira les donnes qui rempliront la table dans laquelle
des colonnes vont tre ajoutes pour faire rfrence dautres tables.
Dfinissez la proprit query de queryDataSet2 comme suit :
3 Cliquez sur Tester la requte. Lorsquelle est russie, cliquez sur OK
pour fermer la bote de dialogue.
4 Slectionnez JdbTable dans le volet contenu et modifiez sa proprit
dataSet en queryDataSet2.
Cela vous permet de visualiser les donnes dans le concepteur et dans
lapplication excute.
5 Cliquez sur licne dextension gauche du composant queryDataSet2
dans larborescence des composants pour afficher toutes les colonnes,
slectionnez <nouvelle colonne> et dfinissez dans linspecteur les
proprits suivantes pour la nouvelle colonne :
La nouvelle colonne apparat dans la liste des colonnes et dans le
contrle grille. La proprit preferredOrdinal permet de prciser
lemplacement auquel sera affiche cette colonne, ou toute autre
colonne. Aucune donne nest affiche dans la colonne de rfrence de
la table du concepteur. Les rfrences ne sont visibles que lors de
lexcution de lapplication. Le type de donnes STRING est utilis ici
Pour cette option Choisissez
Base de donnes database1
Instruction SQL select * from EMPLOYEE_PROJECT
Nom de la proprit Valeur
calcType CALC
caption EMPLOYEE_NAME
columnName EMPLOYEE_NAME
dataType STRING
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-7
C r a t i o n d e r f r e n c e s
car cest le type de donnes de la colonne LAST_NAME servant de
colonne de rfrence. Les colonnes calcules sont, toujours, en lecture
seule.
6 Slectionnez longlet Evnements de linspecteur (la nouvelle colonne
tant toujours slectionne dans le volet contenu) puis, slectionnez et
double-cliquez sur lvnement calcFields.
Le curseur est correctement positionn dans le volet Source.
7 Saisissez le code suivant, qui effectue la recherche et place la valeur
rfrence dans la colonne nouvellement dfinie.
void queryDataSet2_calcFields(ReadRow changedRow, DataRow
calcRow, boolean isPosted) throws DataSetException{
// Dfinit un DataRow pour conserver le numro de lemploy rechercher
// dans queryDataSet1, et un autre pour conserver la ligne des donnes
// de lemploy trouves.
DataRow lookupRow = new DataRow(queryDataSet1, "EMP_NO");
DataRow resultRow = new DataRow(queryDataSet1);
// Le EMP_NO de la ligne courante de queryDataSet2 est
// le critre de recherche.
// La premire correspondance est recherche, car EMP_NO est unique.
// Si la recherche russit, les champs nom sont concatns partir
// des donnes de lemploy et le rsultat est plac dans dataRow ;
// sinon, la colonne demeure vierge.
lookupRow.setShort("EMP_NO", changedRow.getShort("EMP_NO"));
if (queryDataSet1.lookup(lookupRow, resultRow,
Locate.FIRST))
calcRow.setString("EMPLOYEE_NAME",
resultRow.getString("FIRST_NAME") +
" " + resultRow.getString("LAST_NAME"));
}
}
8 Cliquez sur longlet Source et entrez le code suivant aprs lappel
jbInit().
queryDataSet1.open();
Cela ouvre queryDataSet1, qui est attach la table EMPLOYEE.
Normalement, un composant visuel orient donnes tel que JdbTable
ouvre automatiquement lensemble de donnes, mais dans ce cas,
aucun composant visuel nest attach cet ensemble de donnes qui
doit donc tre ouvert explicitement.
9 Choisissez Excuter|Excuter le projet afin dexcuter lapplication.
12-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
Lapplication excute a laspect suivant :
Figure 12.1 Application de rfrence
Quand lapplication sexcute, les valeurs de la colonne de rfrence
calcule sadaptent automatiquement aux modifications des autres
colonnes, dans cet exemple la colonne EMP_NO, qui est utilise dans les
valeurs calcules. Si le champ EMP_NO est modifi, la rfrence affiche la
valeur associe la valeur en cours quand cette valeur est valide.
Utilisation de colonnes calcules
Habituellement, une colonne (Column) dans un StorageDataSet obtient ses
valeurs depuis une colonne de base de donnes ou comme rsultat de
limportation dun fichier texte. Une colonne peut galement driver ses
valeurs du rsultat dune expression calcule. JBuilder gre deux types de
colonnes calcules : calcules ou agrges.
Pour crer une colonne calcule, crez un nouvel objet persistant Column
dans le StorageDataSet et spcifiez lexpression dans le gestionnaire
dvnement calcFields de lobjet StorageDataSet. Les colonnes calcules
peuvent tre dfinies et visualises dans JBuilder. Les valeurs calcules ne
sont visibles que lorsque lapplication sexcute. Les colonnes calcules
dfinies dans JBuilder nexistent que dans lensemble de donnes JBuilder
et non dans la table de la base de donnes o se trouvent les autres
donnes de lensemble. Cependant, ces colonnes calcules peuvent tre
crites dans un fichier texte. Pour davantage dinformations sur la
dfinition de colonnes calcules dans le concepteur, voir Cration dune
colonne calcule dans le concepteur, page 12-9. Pour davantage
dinformations sur la manipulation des colonnes, voir Chapitre 7,
Manipulation des colonnes.
La formule dune colonne calcule utilise gnralement des expressions
faisant rfrence dautres colonnes de lensemble de donnes afin de
gnrer une valeur pour chaque ligne de lensemble de donnes. Par
exemple, un ensemble de donnes peut contenir des colonnes non
calcules pour la quantit (QUANTITY) et le prix unitaire (UNIT_PRICE)
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-9
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
et une colonne calcule pour le prix total (EXTENDED_PRICE). La
colonne EXTENDED_PRICE est calcule en multipliant les valeurs de
QUANTITY et de UNIT_PRICE.
Les colonnes agrges calcules peuvent tre utilises pour grouper et
rcapituler les donnes, par exemple, pour rcapituler les ventes totales
par trimestre. Les calculs statistiques peuvent tre spcifis entirement
via des paramtres de proprits et plusieurs colonnes peuvent tre
incluses dans le regroupement. Quatre types de fonctions statistiques sont
supports (sum, count, min et max) ainsi quun mcanisme de cration de
mthodes de calcul statistique personnalises. Pour davantage
dinformations, voir Agrgation de donnes avec des champs calculs,
page 12-11.
Les colonnes calcules sont galement utiles pour stocker des rfrences
dans dautres tables. Par exemple, un numro de srie peut tre utilis
pour rcuprer la description dun objet afin de lafficher dans un lment
dune ligne de commande. Pour davantage dinformations sur lutilisation
dun champ calcul comme champ de rfrence, voir Cration de
rfrences, page 12-2.
Les valeurs de toutes les colonnes calcules dune ligne sont values dans
le mme appel dvnement.
Cette section traite les sujets suivants :
Cration dune colonne calcule dans le concepteur
Agrgation de donnes avec des champs calculs
Dfinition des proprits de AggDescriptor
Cration dun gestionnaire dvnement dagrgation personnalis
Cration dune colonne calcule dans le concepteur
Cet exemple est bas sur lexemple de la section Accs aux donnes des
exemples, page 11-2. La table de base de donnes interroge est
EMPLOYEE. Le point de dpart de cet exemple est lattribution dune
augmentation de 10 % tous les employs. Une nouvelle colonne,
nomme NEW_SALARY est cre ainsi quune expression multipliant la
valeur du salaire existante, SALARY, par 1.10 et plaant la valeur
rsultante dans la colonne NEW_SALARY. Le projet complet est
disponible dans le sous-rpertoire /samples/DataExpress/CalculatedColumn
de linstallation JBuilder sous le nom de projet CalculatedColumn.jpx.
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2.
Cette tape vous permet de vous connecter une base de donnes, de
lire les donnes dune table, de voir et de modifier ces donnes dans un
composant orient donnes.
12-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
2 Cliquez sur licne dextension ct du composant queryDataSet1 dans
larborescence des composants pour afficher toutes les colonnes,
slectionnez <nouvelle colonne> et dfinissez dans linspecteur les
proprits suivantes pour la nouvelle colonne :
Si vous ajoutez plusieurs colonnes, vous pouvez utiliser la proprit
preferredOrdinal pour prciser lemplacement auquel sera affiche cette
colonne, ou toute autre colonne persistante. Aucune donne nest
affiche dans la colonne calcule de la table du concepteur. Les calculs
ne sont effectus quau moment de lexcution de lapplication. Le type
de donnes BIGDECIMAL est employ ici car cest le type de donnes
de la colonne SALARY qui est utilise dans lexpression de calcul. Les
colonnes calcules sont toujours en lecture seule.
3 Slectionnez lobjet queryDataSet1, slectionnez longlet Evnements de
linspecteur, slectionnez le gestionnaire dvnement calcFields et
double-cliquez sur sa valeur.
Cela cre le stub de la mthode de lvnement dans la fentre Source.
4 Modifiez la mthode dvnement afin de calculer laugmentation de
salaire, de la manire suivante :
void queryDataSet2_calcFields(ReadRow changedRow, DataRow
calcRow, boolean isPosted) throws DataSetException{
//calcule le nouveau salaire
calcRow.setBigDecimal("NEW_SALARY",
changedRow.getBigDecimal("SALARY").multiply(new
BigDecimal(1.1)));
}
Cette mthode est appele pour calcFields chaque fois quune valeur de
champ est enregistre et chaque fois quune ligne est valide. Cet
vnement reoit une donne reprsentant la valeur en cours dans la
ligne (changedRow) et renvoie une ligne pour y placer les modifications
que vous voulez apporter la ligne (calcRow) et un boolen (isPosted)
indiquant si la ligne est valide ou pas dans DataSet. Vous pouvez ne
pas recalculer les champs pour les lignes qui nont pas encore t
valides.
5 Importez la classe java.math.BigDecimal pour utiliser le type de donnes
BIGDECIMAL. Ajoutez linstruction suivante aux instructions import :
import java.math.BigDecimal;
Nom de la proprit Valeur
calcType CALC
caption NEW_SALARY
columnName NEW_SALARY
dataType BIGDECIMAL
currency true
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-11
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
6 Excutez lapplication pour visualiser le rsultat de lexpression de
calcul.
Quand lapplication est excute, la valeur de la colonne calcule sajuste
automatiquement aux modifications de toute autre colonne rfrence
dans lexpression calcule. Le colonnes NEW_SALARY affichent la valeur
de (SALARY * 1.10). Lapplication en train de sexcuter ressemble ceci :
Figure 12.2 Colonnes calcules
Agrgation de donnes avec des champs calculs
Vous pouvez utiliser les possibilits dagrgation des colonnes calcules
pour rsumer vos donnes de diverses faons. Les colonnes pour
lesquelles calcType a la valeur aggregated ont la capacit de :
Regrouper et de rsumer les donnes pour dterminer les extrmes
Calculer une somme.
Compter le nombre doccurrences dune valeur de champ.
Dfinir un agrgat personnalis avec votre propre mode dagrgation.
La proprit AggDescriptor sert dfinir les colonnes selon lesquelles
seffectue le regroupement, la colonne agrger et lopration
dagrgation effectuer. LaggDescriptor est trait en dtail dans les
sections suivantes. Lopration dagrgation est une instance de lune des
classes suivantes :
CountAggOperator
SumAggOperator
MaxAggOperator
MinAggOperator
Une classe dagrgation personnalise que vous dfinissez vous-mme
Il est plus facile de crer une colonne agrge calcule que de crer une
colonne calcule, car il ny a pas besoin dune mthode dvnement (sauf
pour crer un composant dagrgation personnalis). La fonction
statistique peut tre calcule pour lensemble de donnes entier ou vous
pouvez grouper sur une ou plusieurs colonnes de lensemble de donnes
et calculer une valeur statistique pour chaque groupe. La colonne
12-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
statistique calcule est dfinie dans lensemble de donnes en cours de
rcapitulation, ainsi chaque ligne du groupe aura la mme valeur dans la
colonne calcule (la valeur statistique du groupe en question). La colonne
est cache par dfaut. Vous pouvez afficher la colonne ou afficher ses
valeurs dans un autre contrle, comme cest le cas dans la section
suivante.
Exemple : Agrgation de donnes avec des champs calculs
Dans lexemple suivant, vous allez interroger la table SALES et crer un
composant JdbTextField afin dafficher la somme du champ
TOTAL_VALUE pour le champ CUST_NO en cours. Pour ce faire, il faut
dabord crer une nouvelle colonne nomme GROUP_TOTAL. La valeur
aggregated est affecte la proprit calcType de la colonne et une
expression est cre pour rsumer la valeur du champ TOTAL_VALUE de
la table SALES par numro de client et placer la valeur rsultante dans la
colonne GROUP_TOTAL. Le projet complet est disponible dans le
sous-rpertoire /samples/DataExpress/Aggregating de linstallation JBuilder.
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2.
Cette tape vous permet de vous connecter une base de donnes, de
lire les donnes dune table, de voir et de modifier ces donnes dans un
composant orient donnes.
2 Cliquez sur queryDataSet1 dans larborescence des composants.
Ce composant constitue la requte utilise pour remplir lensemble de
donnes avec les valeurs agrger.
3 Ouvrez la proprit query de queryDataSet1 et modifiez linstruction SQL
pour quelle devienne :
SELECT CUST_NO, PO_NUMBER, SHIP_DATE, TOTAL_VALUE from SALES
4 Cliquez sur le bouton Tester la requte pour tester la requte et vrifier
sa validit ; lorsque la requte est russie, cliquez sur OK.
5 Cliquez sur licne dextension ct du composant queryDataSet1 dans
larborescence des composants afin dafficher toutes les colonnes,
slectionnez <nouvelle colonne> et dfinissez dans linspecteur les
proprits suivantes pour la nouvelle colonne :
Nom de la proprit Valeur
caption GROUP_TOTAL
columnName GROUP_TOTAL
currency True
dataType BIGDECIMAL
calcType aggregated
visible Oui
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-13
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
Une nouvelle colonne est instancie et le code suivant est ajout la
mthode jbInit(). Slectionnez longlet Source pour voir le code.
Slectionnez longlet Conception pour continuer.
column1.setCurrency(true);
column1.setCalcType(com.borland.dx.dataset.CalcType.AGGREGATE);
column1.setCaption("GROUP_TOTAL");
column1.setColumnName("GROUP_TOTAL");
column1.setDataType(com.borland.dx.dataset.Variant.BIGDECIMAL);
6 Depuis la page dbSwing de la palette de composants, ajoutez un
JdbTextField au concepteur dinterface utilisateur ; dfinissez sa
proprit dataSet par queryDataSet1 et sa proprit columnName par
GROUP_TOTAL.
Ce contrle affiche les donnes agrges. Vous pouvez aussi ajouter un
contrle JdbTextArea pour dcrire ce quaffiche le champ texte.
Aucune donne nest affiche dans le JdbTextField dans le concepteur.
Les calculs ne sont effectus quau moment de lexcution de
lapplication. Le type de donne BIGDECIMAL est utilis ici car cest le
type de donnes de la colonne TOTAL_VALUE qui est utilise dans
lexpression de calcul. Les colonnes agrges sont toujours en lecture
seule.
7 Slectionnez chacune des colonnes suivantes et dfinissez par True la
proprit visible de chacune.
PO_NUMBER
CUST_NO
SHIP_DATE
Cette tape rend persistantes les colonnes affiches dans la table. Les
colonnes persistantes sont places entre crochets dans le volet contenu.
8 Slectionnez la colonne GROUP_TOTAL dans le volet contenu et; pour
dfinir lagrgat de cette colonne, double-cliquez sur la proprit agg
afin dafficher lditeur de la proprit agg.
Dans lditeur de la proprit agg,
a Slectionnez CUST_NO dans la liste Colonnes disponibles. Cliquez
sur Ajouter au groupe pour dsigner ce champ comme le champ qui
sera utilis pour dfinir le groupe.
b Slectionnez TOTAL_VALUE dans la liste Colonne statistique afin
de la spcifier comme colonne contenant les donnes agrger.
c Slectionnez SumAggOperator dans la liste Opration statistique afin de
spcifier que cette opration doit tre effectue.
En fonction de ces slections, vous obtiendrez le total des ventes pour
un client donn.
12-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
9 Cliquez sur OK lorsque lditeur de la proprit agg ressemble ceci :
Cette tape gnre le code source suivant dans la mthode jbInit() :
column1.setAgg(new com.borland.dx.dataset.AggDescriptor(new
String[] {"CUST_NO"}, "TOTAL_VALUE", new
com.borland.dx. dataset.SumAggOperator()));
10 Excutez lapplication en choisissant Excuter|Excuter le projet pour
visualiser le rsultat de lagrgation.
Lapplication en train de sexcuter ressemble ceci :
Quand lapplication est excute, les valeurs du champ agrg sont
automatiquement modifies pour reflter les modifications du champ
TOTAL_VALUE. De mme, la valeur affiche dans le JdbTextField affiche
lagrgat pour le CUST_NO de la ligne slectionne.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-15
U t i l i s a t i o n d e c o l o n n e s c a l c u l e s
Dfinition des proprits de AggDescriptor
Lditeur de la proprit agg propose une interface simple pour crer et
modifier les objets AggDescriptor. Le constructeur dun objet AggDescriptor
ncessite les informations suivantes :
Groupement des colonnes Un tableau de chanes (sans ordre)
indiquant le nom des colonnes utilises pour dfinir le sous-ensemble
des lignes du DataSet sur lequel doit porter lagrgation.
Colonne statistique Une chane reprsentant le nom de la colonne
dont les valeurs seront agrges.
Opration statistique Le nom dun objet de type AggOperator qui
ralise effectivement lagrgation.
Lditeur de la proprit agg extrait les noms de toutes les colonnes
utilisables comme colonnes de regroupement et les propose dans la liste
Colonnes disponibles. Seul les noms des colonnes non calcules et non
agrges sont proposs dans cette liste.
Si le DataSet contenant la colonne dont la proprit agg est dfinie a un
descripteur MasterLink (autrement dit, si cest un DataSet dtail), les noms
des colonnes de liaison sont ajouts par dfaut la liste des colonnes de
regroupement lors de la dfinition dun nouveau AggDescriptor.
Les boutons placs en dessous de la liste des colonnes de regroupement et
de la liste des colonnes disponibles permettent de dplacer dune liste
lautre le nom de colonne mis en vidence. De mme, en double-cliquant
sur un nom de colonne, vous le faites passer dans lautre liste. Les entres
des deux listes sont en lecture seule. Comme lordre des colonnes na pas
dimportance dans un groupe, chaque nom de colonne est ajout la fin
des listes. Il est possible de laisser un groupe vide (nul).
Le contrle Colonne statistique contient les noms de toutes les colonnes
non agrges du DataSet en cours. Bien que les composants AggOperator
fournis avec le paquet DataExpress ne prennent pas en charge lagrgation
des colonnes de type non numrique, nous ne limitons pas les colonnes de
la liste aux types numriques ; il est en effet possible de crer un
AggOperator personnalis apte prendre en charge les types chane ou date.
Le contrle Opration statistique affiche la liste des composants
AggOperator intgrs au paquet DataExpress ainsi que les composants
AggOperator dfinis par lutilisateur dans le mme contexte de classe que la
colonne du AggDescriptor.
Les utilisateurs dsireux deffectuer des calculs sur des valeurs agrges
(par exemple, la somme des lments dune commande multiplie par une
constante) doivent cocher la case Calcul sur fonction statistique. Cela
dsactive les contrles Colonne statistique et Opration statistique et
substitue null leur valeur dans le constructeur du AggDescriptor, ce qui
12-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
indique un agrgat de type calcul. Quand la case Calcul sur fonction
statistique nest pas coche, les contrles Colonne statistique et Opration
statistique sont activs.
Cration dun gestionnaire dvnement dagrgation
personnalis
Pour utiliser une mthode dagrgation autre que celles fournies par
JBuilder, vous pouvez crer un gestionnaire dvnement dagrgation
personnalis. Un des moyens consiste coder les vnements calcAggAdd et
calcAggDelete via le concepteur dinterface utilisateur. calcAggAdd et
calcAggDelete sont des vnements de StorageDataSet appels lorsque le
AggOperator est inform dune opration dactualisation.
Une utilisation habituelle de ces vnements est de faire la somme des
colonnes dans une table dlments ligne (comme SALES). Le montant en
Francs peut tre calcul en utilisant un SumAggOperator prdfini. Dautres
colonnes agrges peuvent tre ajoutes en dfinissant par null la
proprit aggOperator du AggDescriptor. Ces colonnes supplmentaires
peuvent servir appliquer un taux de TVA ou de remise au sous-total,
pour calculer les frais dexpdition, et ensuite pour calculer le total
gnral.
Vous pouvez aussi crer une classe dagrgation personnalise en
implmentant un composant oprateur statistique personnalis tendant
AggOperator et implmentant les mthodes abstraites. Lintrt de
limplmentation dun composant est sa rutilisabilit dans dautres
composants DataSet. Vous pouvez crer des classes dagrgation pour
calculer une moyenne, un cart-type ou une variance.
Ajout de modles daffichage ou de modification pour formater les
donnes
Toutes les donnes stockes de manire interne, comme les nombres et les
dates, sont saisies et affiches sous la forme de chanes de caractres. Le
formatage est le processus de conversion de la reprsentation interne en un
quivalent chane. Lanalyse est le processus de conversion de la
reprsentation chane en reprsentation interne. Ces deux conversions
sont dfinies par des rgles spcifies par des modles exprims sous
forme de chanes.
Le formatage et lanalyse des donnes du paquet DataSet sont contrls
par la classe VariantFormatter, dfinie de manire unique pour chaque objet
Column dun ensemble de donnes. Afin de simplifier lutilisation de cette
classe, il existe des proprits chane correspondantes qui, lorsquelles
sont dfinies, construisent un VariantFormatter pour lobjet Column en
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-17
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
utilisant la syntaxe des modles dfinie dans les classes java.text.Format
du JDK.
Il y a quatre types diffrents de modles correspondant aux diffrents
types de donnes de llment contrler :
1 les modles de nombre ;
2 les modles de date et dheure ;
3 les modles de chane ;
4 les modles de boolen.
Pour davantage dinformations sur les modles, voir Modles bass sur
des chanes (masques) dans la Rfrence de la bibliothque de composants
DataExpress.
Les proprits de lobjet Column qui utilisent les modles exprims sous
forme de chane sont :
La proprit displayMask, qui dfinit le modle utilis pour la saisie et
laffichage de base.
La proprit editMask, qui dfinit le modle utilis pour analyser la
saisie de donnes touche par touche (galement appel fragmentation).
La proprit exportDisplayMask, qui dfinit le modle utilis pour
importer et exporter les donnes dans un fichier texte.
Les implmentations par dfaut de VariantFormatter pour chaque objet
Column sont simples afin dtre rapide. Les colonnes mettant en jeu des
caractres de ponctuation, comme les dates, utilisent un modle par
dfaut driv des paramtres de locale de la colonne. Pour remplacer le
formatage par dfaut, par exemple pour utiliser le point comme
sparateur des milliers au lieu de lespace, dfinissez explicitement le
modle sous forme dune chane pour la proprit que vous voulez
changer (displayMask, editMask ou exportDisplayMask).
Laffectation dune chane vide ou null displayMask, editMask et
exportDisplayMask a une signification particulire : cela choisit le modle
correspondant la valeur de la proprit Locale. Cest le comportement
par dfaut dans JBuilder pour les colonnes de type Date, Time,
Timestamp, Float, Double et BigDecimal. Ce faisant, JBuilder garantit
quune application qui utilise les valeurs par dfaut va automatiquement
employer le bon format daffichage quand elle est excute dans un autre
pays.
Remarque Si vous ralisez des applications internationales utilisant des valeurs de
locale autres que en_US (English (United States)), vous devez utiliser dans
vos modles le style de sparateur amricain (par exemple, la virgule
comme sparateur des milliers et le point comme sparateur dcimal). En
procdant ainsi, lapplication peut utiliser les mmes modles quel que
soit le pays o elle est installe. Quand vous utilisez une locale autre que
en_US, ces caractres sont convertis par le JDK dans leur quivalent local
12-18 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
et affichs de manire approprie. Pour un exemple dutilisation des
modles dans une application internationale, voir le fichier projet
IntlDemo.jpx, situ dans le sous-rpertoire /samples/dbSwing/MultiLingual de
votre installation JBuilder.
Pour remplacer les formats par dfaut des valeurs numriques et dates
stockes dans les fichiers locaux, affectez les proprits displayMask,
editMask ou exportDisplayMask du composant Column de lensemble de
donnes.
Les possibilits de formatage proposes par les chanes de modle du
paquet DataExpress suffisent gnralement pour la plupart des cas. Si vous
avez besoin de modles plus spcifiques, le mcanisme de formatage
dispose dinterfaces et de classes que vous pouvez tendre pour crer des
classes de formatage personnalises.
Masques daffichage
Les masques daffichage sont des modles sous forme de chane utiliss
pour formater les donnes affiches par les colonnes, par exemple dans un
JdbTable. Les modles daffichage peuvent ajouter des espaces ou des
caractres spciaux llment de donnes.
Les masques daffichage sont galement utiliss pour analyser les saisies
de lutilisateur en convertissant la chane saisie dans le type adapt la
colonne. Si vous entrez des donnes qui ne peuvent tre analyses en
utilisant le masque daffichage spcifi, vous navez pas le droit de sortir
du champ tant que les donnes ne sont pas saisies de la manire
approprie.
Astuce Les saisies utilisateur qui ne peuvent tre analyses par le modle spcifi
gnrent des messages de validation. Ces messages apparaissent dans le
contrle JdbStatusLabel quand JdbStatusLabel et le composant dinterface
utilisateur affichant les donnes modifier (par exemple, un JdbTable) sont
lis au mme ensemble de donnes.
Masques de saisie
Avant le dbut de la saisie, le masque daffichage contrle entirement le
formatage et la fragmentation. Les masques de saisie sont des modles
optionnels sous forme de chane utiliss pour contrler la saisie dans une
colonne et pour replacer les donnes de la chane saisie dans la colonne en
traitant les frappes de touche une une.
Quand le masque de saisie dune colonne est spcifi, les caractres
littraux placs dans le modle peuvent tre ventuellement enregistrs
avec les donnes. Les emplacements du modle indiquant des caractres
saisir saffichent par dfaut comme un caractre de soulignement (_).
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-19
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
Au fil de la saisie dans une colonne utilisant un masque de saisie, la saisie
est valide en confrontant chaque touche enfonce aux caractres
autoriss par le modle la position en cours dans le masque.
Les caractres qui ne sont pas autoriss un emplacement donn du
modle ne sont pas pris en compte et le curseur ne passe au caractre
suivant que si le critre dfini cet emplacement du modle est respect.
Utilisation de masques pour limportation et lexportation
de donnes
Quand des donnes sont importes dans un composant DataExpress,
JBuilder recherche un fichier SCHEMA (.schema) portant le mme nom que
le fichier de donnes. Sil le trouve, les valeurs du fichier SCHEMA sont
prioritaires. Sil ne le trouve pas, il examine la proprit exportDisplayMask
de la colonne. Utilisez la proprit exportDisplayMask pour formater les
donnes importes.
Les fichiers imports contiennent frquemment des caractres de
formatage montaire qui ne peuvent tre placs directement dans une
colonne numrique. Le modle exportDisplayMask permet de lire les valeurs
en omettant le formatage montaire. Une fois les donnes importes dans
JBuilder, dfinissez les masques daffichage et/ou de saisie pour mettre en
place les formatages, montaires ou autres, de votre choix.
Quand des donnes sont exportes, JBuilder utilise exportDisplayMask pour
formater les donnes exporter. Il cre galement un fichier SCHEMA
avec ces paramtres afin que les donnes puissent tre rimportes
facilement dans un composant DataExpress.
Modles dpendant du type de donnes
Les sections suivantes dcrivent et donnent des exemples de modles
utilisables pour les diffrents types de donnes.
Modles pour les donnes numriques
Les modles pour les donnes de type numrique sont composs de deux
parties : la premire partie spcifie le modle utiliser pour les nombres
positifs (nombres suprieurs 0) et la seconde, le modle pour les
nombres ngatifs. Ces deux parties sont spares par un point-virgule (;).
Les symboles utilisables pour les donnes numriques sont dcrits dans la
section Modles de donnes numriques de la Rfrence de la bibliothque
de composants DataExpress.
12-20 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
Les composants Column numrique ont toujours des masques daffichage et
de saisie. Si vous ne dfinissez pas explicitement ces proprits, des
modles par dfaut sont dfinis en recherchant de la manire suivante :
1 Dans la locale du composant Column ;
2 Si la locale du composant Column nest pas dfinie, dans la locale de
lobjet DataSet ;
3 Si la locale de lobjet DataSet nest pas dfinie, dans la locale par dfaut
du systme. Les donnes numriques saffichent par dfaut avec trois
chiffres aprs la virgule.
Il est possible de saisir un nombre quelconque de chiffres gauche de la
virgule dans une colonne numrique. Par contre, les masques limitent la
saisie au nombre de chiffres spcifis gauche du sparateur dcimal
dans le masque. Pour tre sr que toutes les valeurs autorises puissent
tre saisies dans une colonne, spcifiez un nombre suffisant de chiffres
gauche du sparateur dcimal dans la spcification du modle.
De plus, chaque masque numrique contient un caractre supplmentaire
gauche des donnes pour contenir le signe du nombre.
Le code utilis pour dfinir le masque daffichage du premier modle du
tableau suivant est :
column1.setDisplayMask(new String("###%"));
Le tableau suivant prsente plusieurs exemples de spcifications de
modles pour les donnes numriques :
Spcification
de modle Valeur Valeur formate Signification
###% 85 85% Tous les chiffres sont optionnels, les zros de
dbut ne sont pas affichs, la valeur est divise
par 100 et saffiche comme un pourcentage.
# ##0,0#^ F;-# ##0,0#^ F 500.0
-500.5
004453.3211
-00453.3245
500,0 F
-500,5 F
4 453,32 F
-453,32 F
Le 0 indique un chiffre obligatoire, les zros
ne sont pas supprims. Les nombres ngatifs
sont prcds dun signe moins (-). La valeur
littrale F est affiche droite de la valeur.
Le curseur est positionn au point indiqu par
le caret (^), les chiffres se dplaant vers la
gauche au fil de la saisie.
$#,###.##;($#,###.##) 4321.1
-123.456
$4,321.1
($123.46)
Tous les chiffres sont optionnels, affiche le
sparateur des milliers et le sparateur dcimal
ainsi que le symbole montaire. Les valeurs
ngatives sont entre parenthses. Si le signe
moins (-) ou la parenthse ouvrante (() sont
saisis, JBuilder encadre la valeur de
parenthses.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-21
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
Modles des donnes date et heure
Les colonnes contenant des donnes date, heure ou date/heure ont
toujours des masques daffichage et de saisie. Si vous ne dfinissez pas
explicitement ces proprits, des modles par dfaut sont dfinis en
recherchant de la manire suivante :
1 Dans la locale du composant Column ;
2 Si la locale du composant Column nest pas dfinie, dans la locale de
lobjet DataSet ;
3 Si la locale de lobjet DataSet nest pas dfinie, dans la locale par dfaut
du systme.
Les symboles de modle utilisables pour les donnes date, heure et date/
heure sont dcrits dans la section Modles date, heure et date/heure de
la Rfrence de la bibliothque de composants DataExpress.
Le code dfinissant le masque de saisie du premier modle du tableau
suivant est :
column1.setDisplayMask(new String("jj MMM aaaaG"));
Le tableau suivant prsente plusieurs exemples de spcifications de
modles pour les donnes date et heure :
Modles de donnes chane
Les modles de formatage et de modification des donnes sont spcifiques
aux classes DataExpress. Ils sont composs de quatre parties spares par
des points-virgules dont seule la premire est obligatoire. Ces diffrentes
parties sont :
1 Le modle de la chane.
2 Indique si les littraux doivent tre stocks avec les donnes. La valeur
1 (comportement par dfaut) spcifie le stockage des littraux avec les
donnes. Pour retirer les littraux des donnes stockes, utilisez 0.
3 Le caractre utiliser comme indicateur blanc. Ce caractre indique
les emplacements saisir dans les donnes. Si cette partie est omise, le
caractre de soulignement (_) est utilis par dfaut.
Spcification
de modle Valeur Valeur formate Signification
jj MMM aaaaG 14 janvier 1900
2 fvrier 1492
14 Jan 1900AD
02 Fv 1492AD
Renvoie deux chiffres pour le jour, labrviation du
mois, un espace (littral) et 4 chiffres pour lanne.
j/MM/aa H:m 4 juillet 1776
3:30am
2 mars 1997
11:59pm
07/4/76 3:30
03/2/92 23:59
Renvoie un ou deux chiffres pour le jour, le
numro du mois, deux chiffres pour lanne et
lheure en utilisant une horloge de 24 heures.
12-22 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A j o u t d e m o d l e s d a f f i c h a g e o u d e m o d i f i c a t i o n p o u r f o r m a t e r l e s d o n n e s
4 Les caractres utiliser pour remplacer les zones vides laffichage.
Si cette partie est omise, les positions vides sont supprimes.
Les symboles de modle utilisables pour les donnes texte sont dcrits
dans la section Modles de texte de la Rfrence de la bibliothque de
composants DataExpress.
Par exemple, le code dfinissant le masque daffichage et de saisie du
premier modle spcifi dans le tableau suivant est :
column1.setDisplayMask(new String("00000{-9999}"));
column1.setEditMask(new String("00000{-9999}"));
Le tableau suivant prsente quelques spcifications de modles :
Modles des donnes boolennes
Le composant BooleanFormat utilise un modle sous forme de chane qui
permet de travailler avec des donnes pouvant prendre deux valeurs
stockes comme true ou false. Les donnes de ces deux catgories sont
formates en utilisant les valeurs chanes spcifies. Ce formateur peut
galement formater les valeurs null ou non affectes.
Vous pouvez, par exemple, stocker une information indiquant le sexe des
individus dans une colonne de type boolean tout en faisant formater le
champ par JBuilder afin dafficher et daccepter des saisies de la forme
Homme et Femme, comme lillustre le code suivant :
column1.setEditMask("Homme;Femme;");
column1.displayMask("Homme;Femme;");
Spcification
de modle Valeur Valeur formate Signification
00000{-9999} 950677394
00043
1540001
95067-7394
00043
00154-0001
Affichage des zros pour les cinq positions de
gauche (obligatoires), les caractres restants sont
optionnels, ce sont un tiret littral et quatre chiffres.
Utilisez ce modle pour les codes postaux
amricains.
L0L 0L0 H2A2R9
M1M3W4
H2A 2R9
M1M 3W4
Le L correspond une saisie obligatoire de lettre
A-Z. Le 0 (zro) correspond une saisie obligatoire
de chiffre 0-9, les signes plus (+) et moins (-) ntant
pas autoriss. Utilisez ce modle pour les codes
postaux canadiens.
{(999)} 000-0000^!;0 4084311000 (408) 431-1000 Ce modle correspond aux numros de tlphone
amricains avec un indicatif optionnel entre
parenthses. Le signe caret (^) positionne le curseur
la droite du champ, les donnes se dcalant vers la
gauche au fil de la saisie. Pour que les donnes
soient stockes correctement de droite gauche,
utilisez le symbole !. Ce comportement est
automatique pour les valeurs numriques. Le code
zro (0) indique que les littraux ne sont pas stocks
avec les donnes.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-23
P r s e n t a t i o n d e p l u s i e u r s v u e s d e s d o n n e s
Le tableau suivant donne des modles boolens et le rsultat de leur
formatage :
Prsentation de plusieurs vues des donnes
Dans tout StorageDataSet, il est possible de trier et de filtrer les donnes. Il
y a nanmoins des situations dans lesquelles vous avez besoin de
prsenter simultanment les donnes dun StorageDataSet en utilisant
diffrents tris ou filtres. Le composant DataSetView offre cette possibilit.
Le composant DataSetView permet galement un niveau supplmentaire
dindirection qui donne une plus grande flexibilit dans la modification
des liens des composants dinterface utilisateur. Si vous prvoyez de
changer la liaison de plusieurs composants dinterface utilisateur, liez ces
composants un DataSetView au lieu de les lier directement au
StorageDataSet. Quand il faut changer la liaison, il suffit de modifier le
composant DataSetView pour le lier au composant StorageDataSet appropri,
ainsi une seule modification affecte galement tous les composants
dinterface utilisateur connects au DataSetView.
Pour crer un objet DataSetView et affecter sa proprit storageDataSet
lobjet StorageDataSet contenant les donnes visualiser :
1 Crez une nouvelle application en suivant les instructions de Accs
aux donnes des exemples, page 11-2.
Cette tape vous permet de vous connecter une base de donnes, de
lire les donnes dune table, de voir et de modifier ces donnes dans un
composant orient donnes.
2 Depuis longlet DataExpress, ajoutez un composant DataSetView
larborescence des composants ou au concepteur dinterface utilisateur.
3 Attribuez la valeur queryDataSet1 la proprit storageDataSet du
composant DataSetView.
Le composant DataSetView parcourt les donnes indpendamment de
son StorageDataSet associ.
Spcification
de modle
Format
des valeurs true
Format
des valeurs false
Format
des valeurs null
homme;femme homme femme (chane vide)
V,F,V V F V
Oui,Non,Ne sait pas Oui Non Ne sait pas
fumeur;; fumeur (chane vide) (chane vide)
fumeur;non
fumeur;
fumeur non fumeur (chane vide)
12-24 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
P r s e n t a t i o n d e p l u s i e u r s v u e s d e s d o n n e s
4 Ajoutez dautres TableScrollPane et JdbTable au concepteur dinterface
utilisateur et dfinissez la proprit dataSet du JdbTable par dataSetView1
pour synchroniser la navigation dans les contrles.
5 Compilez et excutez lapplication.
Le composant DataSetView affiche les donnes du QueryDataSet mais sans
dupliquer son contenu. Il prsente les donnes dorigine du QueryDataSet
non tries, non filtres.
Vous pouvez dfinir des critres de tri ou de filtre dans le composant
DataSetView qui diffrent de ceux du StorageDataSet original. Lattachement
du DataSetView un StorageDataSet et la dfinition dun nouveau critre de
filtre et/ou de tri na aucun effet sur les critres de filtre ou de tri dfinis
dans le StorageDataSet.
Pour dfinir un critre de filtre ou de tri dun composant DataSetView,
1 Double-cliquez sur le fichier cadre dans le volet projet et slectionnez
longlet Conception.
2 Slectionnez le composant DataSetView.
3 Dans la page Proprits de linspecteur,
a Slectionnez la proprit sort pour modifier lordre daffichage des
enregistrements dans le DataSetView.
Pour davantage dinformations sur le sortDescriptor, voir Tri des
donnes, page 11-9.
b Slectionnez la proprit masterLink pour dfinir un ensemble de
donnes parent de cette vue.
Pour davantage dinformations sur masterLinkDescriptor, voir
Chapitre 9, Etablissement dune relation matre-dtail.
4 Sur la page Evnements de linspecteur, slectionnez la mthode
filterRow pour masquer temporairement des lignes dans le DataSetView.
Pour davantage dinformations sur le filtrage, voir Filtrage des
donnes, page 11-5.
Vous pouvez, par dfaut, modifier, supprimer ou ajouter des donnes
dans le DataSetView. Quand vous modifiez, supprimez ou ajoutez des
donnes dans le DataSetView, vous le faites galement dans le
StorageDataSet auquel est li le composant DataSetView.
Attribuez la valeur false la proprit enableDelete pour empcher
lutilisateur de supprimer des donnes du StorageDataSet.
Attribuez la valeur false la proprit enableInsert pour empcher
lutilisateur dajouter des donnes au StorageDataSet.
Attribuez la valeur false la proprit enableUpdate pour empcher
lutilisateur de modifier les donnes du StorageDataSet.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-25
G a r a n t i e d e l a p e r s i s t a n c e d e s d o n n e s
Garantie de la persistance des donnes
Entre le moment o vous dveloppez une application et celui o
lutilisateur lexcute, il peut y avoir de nombreuses modifications dans
les donnes de la source. Gnralement les donnes de la source sont
actualises. Mais, plus important, il peut y avoir des modifications de
structure qui sont une cause plus importante dchec de lapplication.
Quand de telles situations se produisent, vous pouvez :
Laisser lapplication chouer quand un tel vnement se produit. Par
exemple, quand une colonne dune table de rfrence a t renomme
sur le serveur de la base de donnes et que cela nest pas dcouvert
avant que lapplication ne tente de modifier la colonne de rfrence.
Arrtez lexcution de lapplication et affichez un message derreur.
Selon lendroit o se trouvent les donnes indisponibles, cette approche
limite le risque dactualisation partielle des donnes.
Par dfaut, les colonnes affiches dans un composant orient donnes sont
dtermines lexcution en fonction des colonnes existant dans
lensemble de donnes. Si la structure de donnes de la source de donnes
a t modifie et savre incompatible avec votre application, une erreur
dexcution est gnre quand cette situation se produit.
JBuilder propose la persistance de donnes comme gestion alternative de
telles situations. Utilisez cette caractristique si le fonctionnement de votre
application dpend de la disponibilit de certaines colonnes de donnes.
Cela garantit que la colonne existe et que les donnes sont affiches dans
lordre spcifi. Si la colonne source dun objet Column persistant est
modifie ou supprime, une Exception est gnre au lieu dune erreur
dexcution quand laccs aux donnes de la colonne choue.
Rendre des colonnes persistantes
Une colonne peut tre rendue persistante en initialisant une des proprits
au niveau de la colonne (par exemple un masque de saisie). Quand une
colonne devient persistante, son nom est entour de crochets ([ ]) dans
larborescence.
Pour initialiser une proprit de colonne,
1 Ouvrez un projet contenant un objet DataSet, par exemple slectionnez
lun des fichiers projets (.jpx) du sous-rpertoire /samples/DataExpress/
de votre installation JBuilder.
2 Double-cliquez sur le fichier Cadre (par exemple, BasicAppFrame.java)
pour louvrir dans le volet contenu, puis cliquez sur longlet
Conception.
12-26 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
G a r a n t i e d e l a p e r s i s t a n c e d e s d o n n e s
3 Double-cliquez sur lobjet DataSet. Cela affiche le concepteur de colonne
pour lensemble de donnes. Le concepteur de colonne ressemble
limage suivante pour la table exemple employee :
Figure 12.3 Concepteur de colonne
4 Slectionnez la colonne dont vous voulez dfinir les proprits.
Linspecteur reflte les proprits (et les vnements) de la colonne
slectionne.
5 Dfinissez une proprit en saisissant une valeur dans la zone de saisie
de linspecteur. Si vous ne voulez pas modifier de proprit de la
colonne, vous pouvez dfinir une valeur, puis la rinitialiser sa valeur
par dfaut.
A titre dexemple, dfinissez la valeur minimum dune colonne contenant
une donne numrique en saisissant une valeur dans la proprit min.
JBuilder met automatiquement le nom de la colonne entre crochets ([ ])
dans larborescence.
Dans le concepteur de colonne, les colonnes de lensemble de donnes
sont affiches dans une table lintrieur du concepteur dinterface
utilisateur. Une barre doutils permet dajouter, de supprimer et de
parcourir lensemble de donnes.
Le bouton Insrer une colonne dans le dataset insre une nouvelle
colonne lindice prfr de la colonne mise en vidence dans la table.
Le bouton Supprimer supprime la colonne de lensemble de donnes.
Les boutons Dplacer vers le haut et Dplacer vers le bas changent la
position par dfaut des colonnes et leur ordre daffichage dans les
composants orients donnes comme le contrle table.
Le bouton Choisir les proprits afficher vous permet de choisir les
proprits affiches dans le concepteur.
Le bouton Continuer toutes les mtadonnes rend persistantes toutes
les mtadonnes ncessaires pour louverture dun QueryDataSet
lexcution. Voir Utilisation du concepteur de colonne pour rendre
persistantes des mtadonnes, page 7-4.
A j o u t d e f o n c t i o n n a l i t s a u x a p p l i c a t i o n s d e b a s e s d e d o n n e s 12-27
U t i l i s a t i o n d e t y p e s d e d o n n e s v a r i a n t
Le bouton Rendre toutes les mtadonnes dynamiques vous permet de
mettre jour une requte aprs la modification ventuelle de la table
sur le serveur. Vous devez dabord rendre les mtadonnes
dynamiques, puis persistantes, afin dutiliser les nouveaux index crs
sur la table de la base de donnes. La slection du bouton Rendre toutes
les mtadonnes dynamiques SUPPRIME LE CODE du fichier source.
Voir Utilisation du concepteur de colonne pour rendre dynamiques
des mtadonnes, page 7-5.
La slection du bouton de gnration de classe de RowIterator ouvre
une bote de dialogue qui offre des fonctionnalits ditration allges
(faible consommation de mmoire et liaison rapide) garantissant un
accs statique aux colonnes avec scurit des types. Voir Bouton Crer
une classe RowIterator, page 7-3, pour davantage dinformations.
Remarque Si vous accdez aux bases de donnes avec JDataStore, vous pouvez
restructurer la base de donnes JDataStore depuis JBuilder, sans crire de
code, laide de JdsExplorer (Outils|Explorateur JDataStore).
Pour fermer le concepteur de colonnes, double-cliquez sur nimporte quel
composant de linterface utilisateur, comme contentPane, dans
larborescence, ou cliquez avec le bouton droit sur un composant, puis
slectionnez Activer le concepteur. En dautres termes, la seule faon de
fermer un concepteur est den ouvrir un autre.
Utilisation de types de donnes variant
Les colonnes peuvent contenir de nombreux types de donnes. Cette
rubrique dcrit comment stocker des objets Java dans un objet Column.
Les colonnes sont traites de faon plus complte au Chapitre 7,
Manipulation des colonnes.
Stockage dobjets Java
Les composants DataSet et DataStore peuvent stocker des objets Java dans
les colonnes dun ensemble de donnes. Les champs dune table SQL,
indiqus par le JDBC comme tant de type java.sql.Types.OTHER, sont
mapps dans les colonnes dont le type de donnes est Variant.OBJECT, mais
vous pouvez galement dfinir le type de donnes dune colonne Object
et lire/crire des valeurs travers lAPI normale des ensembles de
donnes.
Si un DataStore est employ, les objets doivent pouvoir se srialiser. Si ce
nest pas le cas, une exception est dclenche ds que le DataStore tente
denregistrer lobjet. De plus, la classe doit exister dans le CLASSPATH au
moment de lire un objet. Si ce nest pas le cas, la tentative de lecture
choue.
12-28 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d e t y p e s d e d o n n e s v a r i a n t
Veuillez noter ce qui suit concernant le formatage et ldition dune
colonne contenant un objet Java.
Formatage et dition par dfaut
Dans le concepteur dinterface utilisateur, un formateur est attribu par
dfaut aux colonnes de type Object. Quand lobjet est dit, il est
considr comme un objet de type java.lang.String indpendamment
de son type dorigine.
Personnalisation du formatage et de ldition
Vous pouvez (et vous voudrez probablement le faire) dfinir la
proprit formatter dune colonne pour redfinir les fonctionnalits par
dfaut, ou au moins rendre la colonne non modifiable. Un formateur
personnalis permet de dfinir le formatage et la fragmentation adapts
aux objets contenus dans la colonne.
Le mme formateur de colonne est utilis pour tous les enregistrements
de lensemble de donnes. Cela signifie quil nest pas possible de
mlanger des objets de types diffrents dans une mme colonne. Cette
restriction ne sapplique qu ldition personnalise.
U t i l i s a t i o n d a u t r e s c o n t r l e s e t v n e m e n t s 13-1
C h a p i t r e
13
Chapitre13Utilisation dautres contrles
et vnements
Cette rubrique donne davantage dinformations sur lutilisation des
contrles et des vnements. Accs aux donnes des exemples,
page 11-2, dfinit une requte qui peut tre utilise comme point de
dpart pour les questions traites dans ce chapitre.
Ce chapitre aborde les sujets suivants :
Synchronisation des composants visuels
Accs aux donnes et aux informations de modle depuis un
composant dinterface utilisateur
Affichage dinformations dtat
Gestion des erreurs et des exceptions
Synchronisation des composants visuels
Diffrents composants orients donnes peuvent tre associs au mme
DataSet. Dans ce cas, les composants parcourent les donnes de concert.
Quand vous changez de ligne dans un composant, la ligne affiche change
dans tous les composants partageant un mme curseur. Cette
synchronisation des composants associs un mme ensemble de
donnes simplifie considrablement le dveloppement de linterface
utilisateur dune application.
Lensemble de donnes gre un pseudo enregistrement, une zone de la
mmoire dans laquelle est stocke une ligne nouvellement ajoute ou les
modifications apportes une ligne. Les composants qui partagent le
mme ensemble de donnes comme source de donnes partagent
13-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A c c s a u x d o n n e s e t a u x i n f o r m a t i o n s d e m o d l e d e p u i s u n c o m p o s a n t d i n t e r f a c e
galement le mme pseudo enregistrement. Cela permet aux
modifications dtres visibles ds que la saisie au niveau du champ est
acheve, par exemple ds que vous sortez du champ.
Plusieurs composants visuels sont synchroniss par laffectation du mme
ensemble de donnes leur proprit dataSet. Quand des composants sont
lis au mme ensemble de donnes, ils parcourent les donnes de
concert et restent automatiquement synchroniss sur la mme ligne de
donnes. Cest ce que lon appelle des curseurs partags.
Si, par exemple, un programme utilise un JdbNavToolBar et un JdbTable
connects tous les deux au mme QueryDataSet, le fait de cliquer sur le
bouton Dernier dans le JdbNavToolBar affiche automatiquement le
dernier enregistrement du QueryDataSet dans la JdbTable. Si ces composants
sont lis diffrents composants ensemble de donnes, ils ne se
repositionnent pas automatiquement sur la mme ligne de donnes.
Plusieurs composants dbSwing, dont JdbNavToolBar et JdbStatusLabel,
sattachent automatiquement tout ensemble de donnes (DataSet) ayant
la focalisation.
La mthode goToRow(com.borland.dx.dataset.ReadRow) permet de
synchroniser deux composants ensemble de donnes sur la mme ligne
(celle sur laquelle est positionn dataSet) mme si diffrents critres de tri
ou de filtre sont actifs.
Accs aux donnes et aux informations de modle depuis un
composant dinterface utilisateur
Si vous avez initialis la proprit dataSet dun composant, il faut viter
daccder par programme aux donnes ou aux informations de modle de
lensemble de donnes via le composant tant que le responsable du
composant na pas t cr.
Les oprations qui chouent ou renvoient des rsultats incorrects ou
incohrents quand elles sont excutes avant laffichage du composant
dans linterface utilisateur sont celles qui accdent au modle du
composant. Entre autres,
Oprations <composant>.get() ou <composant>.set()
<composant>.insertRow()
etc.
Pour garantir la bonne excution de telles oprations, vrifiez la
notification dvnement open() gnre par lensemble de donnes. Une
fois que la notification dvnement a eu lieu, vous tes certain que le
composant et son modle sont correctement initialiss.
U t i l i s a t i o n d a u t r e s c o n t r l e s e t v n e m e n t s 13-3
A f f i c h a g e d i n f o r m a t i o n s d t a t
Affichage dinformations dtat
Gnralement, les applications de bases de donnes ne se contentent pas
dafficher les donnes, elles affichent galement des informations sur les
donnes. Par exemple, une zone particulire dune fentre propose
souvent des informations sur la ligne en cours, des messages derreur et
autres informations similaires. dbSwing dispose dun composant
JdbStatusLabel qui propose un mcanisme daffichage de ces informations
dtat. Il dispose dune proprit text qui permet de dfinir une chane de
texte devant tre affiche dans le composant JdbStatusLabel. Cette chane
remplace le contenu dj affich par le composant JdbStatusLabel et sera
remplace par la chane suivante crite dans le composant JdbStatusLabel.
Le composant JdbStatusLabel se connecte automatiquement tout
ensemble de donnes ayant la focalisation. Le composant JdbStatusLabel
naffiche pas les donnes de lensemble de donnes mais les informations
dtat suivantes gnres par lensemble de donnes :
La position de ligne en cours ;
le nombre de lignes ;
les erreurs de validation ;
les notifications de mise jour des donnes ;
les messages de recherche.
Ajout dun composant JdbStatusLabel une application
Cette section dcrit lutilisation des outils de conception de JBuilder pour
ajouter un composant dbSwing JdbStatusLabel une application.
Pour ajouter le JdbStatusLabel linterface utilisateur dune application
existante,
1 Ouvrez les fichiers projet de lapplication laquelle vous voulez ajouter
un JdbStatusLabel.
Cette application doit inclure un composant JdbTable, un composant
Database et un composant QueryDataSet. Si vous ne disposez pas dune
application de ce type, utilisez les fichiers crs daprs les instructions
de la section Accs aux donnes des exemples, page 11-2. Vrifiez
que la disposition du contentPane du projet est bien dfinie par null.
2 Double-cliquez sur le fichier cadre dans le volet projet de lAppBrowser
pour louvrir dans le volet du contenu, puis cliquez sur longlet
Conception, en bas de lAppBrowser.
3 Cliquez sur la page dbSwing de la palette des composants et cliquez sur
le composant JdbStatusLabel.
13-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
A f f i c h a g e d i n f o r m a t i o n s d t a t
4 Dessinez le JdbStatusLabel sous le composant JdbTable. Le composant
jdbStatusLabel1 se connecte automatiquement tout objet DataSet ayant
la focalisation.
Habituellement, vous utilisez un composant JdbStatusLabel en
conjonction avec un autre composant dinterface utilisateur,
gnralement un composant JdbTable qui affiche les donnes de
lensemble de donnes. Ainsi, les deux composants suivent le mme
ensemble de donnes, cest ce quon dsigne par le terme de curseur
partag.
Une fois JdbStatusLabel ajout, le composant JdbStatusLabel indique que
le curseur est sur la ligne 1 de x (x indiquant le nombre
denregistrements dans lensemble de donnes).
5 Double-cliquez sur le QueryDataSet.
Cela affiche le concepteur de colonne.
6 Slectionnez les colonnes Last_Name et First_Name et, dans
linspecteur, affectez la valeur true la proprit required de ces deux
colonnes.
7 Affectez la valeur 25000 la proprit min de la colonne SALARY.
8 Excutez lapplication.
Excution de lapplication JdbStatusLabel
Lors de lexcution de cette application, quand vous parcourez lensemble
de donnes, lindicateur de ligne reflte la position de la ligne en cours. De
mme, si vous ajoutez ou supprimez des lignes, le compteur de ligne est
actualis.
Pour tester laffichage des informations de validation,
1 Insrez une nouvelle ligne de donnes. Essayez denregistrer la ligne
sans saisir de valeur dans les colonnes FIRST_NAME ou LAST_NAME.
Un message est affich dans le JdbStatusLabel indiquant quil nest pas
possible denregistrer la ligne en raison de champs manquants ou
incorrects.
2 Entrez une valeur dans les colonnes FIRST_NAME et LAST_NAME.
Saisissez dans la colonne SALARY un nombre (1000) infrieur au
minimum autoris (25000). Quand vous essayez de changer de ligne, le
JdbStatusLabel affiche le mme message derreur signalant que la ligne
ne peut tre valide cause de valeurs de champs manquantes ou
incorrectes.
En dfinissant, des endroits appropris de votre code, le texte du
JdbStatusLabel, vous remplacez le message en cours affich dans le
JdbStatusLabel par ce texte. Mais ce message texte est son tour remplac
U t i l i s a t i o n d a u t r e s c o n t r l e s e t v n e m e n t s 13-5
G e s t i o n d e s e r r e u r s e t d e s e x c e p t i o n s
par le texte suivant que vous dfinissez ou par le texte du prochain
message gnr par lensemble de donnes. Un message dtat est gnr
par les dplacements dans les donnes de la table, les erreurs de
validation, etc.
Gestion des erreurs et des exceptions
En utilisant dans les programmes les classes DataExpress, lessentiel de la
gestion des erreurs est ralise via les extensions DataExpress de la classe
java.lang.Exception. Toutes les classes dexception de dataset sont de type
DataSetException ou de lune de ses sous-classes.
La classe DataSetException peut tre chane dautres types dexceptions,
par exemple les exceptions java.io.IOException et java.sql.SQLException.
Dans ce cas, la classe DataSetException utilise un message appropri
dcrivant lerreur dans la perspective dune API de haut niveau. La
mthode getExceptionChain() de la classe DataSetException peut tre utilise
pour obtenir les exceptions chanes. Les exceptions chanes (une liste
lie simple) sont des exceptions non DataSetException rencontres dans une
API de niveau plus bas.
Le paquet dataset propose une gestion prdfinie des exceptions
DataSetException pour les composants orients donnes dbSwing. Les
contrles ne savent pas par eux-mmes grer les exceptions,
DataSetException. Ils sattendent simplement ce que toutes leurs
oprations de mise jour et daccs aux donnes russissent, laissant la
gestion des erreurs la classe prdfinie DataSetException.
Pour les composants orients donnes dbSwing, la gestion des erreurs par
dfaut de DataSetException fonctionne de la manire suivante :
Si un contrle effectue une opration provoquant une exception
DataSetException, une bote de dialogue Exception est affiche avec le
message associ lerreur. Cette bote de dialogue Exception dispose
dun bouton Dtails qui affiche le suivi de la pile.
Si DataSetException comporte des exceptions chanes, il est possible de
les visualiser en utilisant les boutons Prcdent et Suivant de la bote de
dialogue Exception.
Si lexception dclenche est de type ValidationException (sous-classe de
DataSetException), la bote de dialogue Exception nest affiche que sil
ny a pas dauditeur StatusEvent dans le DataSet, par exemple le contrle
JdbStatusLabel. Une exception ValidationException est gnre par la
violation dune contrainte, par exemple une valeur hors de lintervalle
autoris, une saisie de donnes ne respectant pas la spcification dun
masque de saisie, la tentative de modification dune colonne en lecture
seule, etc. Si un contrle JdbStatusLabel est li un DataSet, il devient
automatiquement un auditeur StatusEvent. Ainsi, les utilisateurs
13-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
G e s t i o n d e s e r r e u r s e t d e s e x c e p t i o n s
peuvent voir dans le libell dtat les messages produits par les
violations.
Remplacement de la gestion par dfaut des exceptions
DataSetException dans les contrles
Il est possible de redfinir des portions de la gestion par dfaut des erreurs
en recensant un auditeur StatusEvent dans lensemble de donnes. Cela
empche laffichage des messages ValidationException dans la bote de
dialogue Exceptions.
Il est possible de neutraliser davantage la gestion par dfaut des
DataSetException pour les contrles au niveau de lensemble de donnes en
attribuant la valeur false sa proprit displayErrors. Comme cest une
proprit densemble de donnes, dfinissez-la pour chaque ensemble de
donnes de lapplication pour neutraliser la gestion des erreurs par dfaut
de tous les objets DataSet de lapplication.
Pour contrler compltement la gestion DataSetException de tous les
contrles dbSwing et des objets ensemble de donnes, vous devez crer
votre propre classe gestionnaire et la connecter lauditeur ExceptionEvent
de la classe DataSetException.
La plupart des vnements du paquet dataset dclenchent des exceptions
DataSetException. Cela savre trs pratique quand vos gestionnaires
derreurs utilisent lAPI dataSet (qui dclenche gnralement
DataSetException). Cela vous vite de coder la logique try/catch pour
chaque gestionnaire dvnements que vous crivez. Pour le moment, les
outils de conception JBuilder ninsrent pas la clause throws
DataSetException dans le code source java quils gnrent mais vous
pouvez ajouter cette clause.
C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e l a i d e d e D a t a S e t D a t a 14-1
C h a p i t r e
14
Chapitre14Cration dune application
de base de donnes distribue
laide de DataSetData
Le projet exemple DataSetData.jpx se trouvant dans le rpertoire /samples/
DataExpress/StreamableDataSets de votre installation JBuilder contient une
application de base de donnes distribue complte qui utilise lappel de
mthode distant (RMI) et DataSetData. Il contient une application serveur
utilisant les donnes de la table exemple employee JDataStore qui envoie
les donnes, via le RMI, sous la forme de DataSetData. Un DataSetData est
utilis pour passer des donnes en tant quargument une mthode RMI
ou en tant que flux dentre un servlet Java.
Une application client communique avec le serveur via un fournisseur et
un rsolveur personnaliss. Lapplication client affiche les donnes dans
une table. Les modifications effectues sur le client peuvent tre
enregistres en utilisant le bouton Enregistrer dune barre doutils
JdbNavToolBar.
Pour plus dinformations sur lcriture de fournisseurs personnaliss, voir
Ecriture dun fournisseur de donnes personnalis, page 6-7. Pour plus
dinformations sur lcriture ou sur la personnalisation dun rsolveur,
voir Personnalisation de la logique de rsolution par dfaut, page 8-16.
Voir le fichier DataSetData.html dans le rpertoire /samples/DataExpress/
StreamableDataSets/ pour des informations actualises sur cette application
exemple.
14-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l i c a t i o n d e l e x e m p l e d a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e
Explication de lexemple dapplication de base de donnes
distribue (utilisant Java RMI et DataSetData)
Le projet exemple, situ dans /samples/DataExpress/StreamableDataSets/
DataSetData.jpx, illustre lutilisation de la classe DataExpress DataSetData
pour construire une application de base de donnes distribue. Outre
lutilisation dobjets DataSetData pour la transmission de donnes de base
de donnes entre un serveur et un client RMI, cet exemple illustre
lutilisation dun fournisseur et dun rsolveur densemble de donnes
personnaliss. Lapplication exemple contient les fichiers suivants :
Fichiers interface
EmployeeApi.java est une interface qui dfinit les mthodes que vous
voulez distantes.
Fichiers serveur
DataServerApp.java est un serveur RMI. Il tend UnicastRemoteObject.
Fichiers fournisseur
ClientProvider.java est limplmentation dun Provider. La mthode
provideData est limplmentation dune mthode de
com.borland.dx.dataset.Provider. Nous faisons rfrence au service
DataServerApp sur lhte spcifi par la proprit hostName, puis
effectuons lappel la mthode distante et chargeons notre DataSet avec
le contenu. Fichiers rsolveur
Fichiers rsolveur
ClientResolver.java est limplmentation dun Resolver. La mthode
resolveData est limplmentation dune mthode de
com.borland.dx.dataset.Resolver. Nous faisons rfrence au service
DataServerApp sur lhte spcifi par la proprit hostName. Puis,
nous rcuprons les modifications dans une instance de DataSetData.
Ensuite, nous effectuons lappel la mthode distante, grons les
ventuelles erreurs de rsolution et changeons les bits dtat de toutes
les lignes modifies pour montrer que tout a t rsolu.
Fichiers client
ClientApp.java est une application client RMI. Voir ClientFrame.java
pour plus de dtails.
Autres fichiers
Res.java est un fichier ressource pour linternationalisation de
lapplication.
ClientFrame.java est le cadre de ClientApp. Remarquez que le DataSet
affich dans la table est un TableDataSet avec un fournisseur
C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e l a i d e d e D a t a S e t D a t a 14-3
E x p l i c a t i o n d e l e x e m p l e d a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e
personnalis et un rsolveur personnalis. Voir ClientProvider.java et
ClientResolver.java pour plus de dtails.
DataServerFrame.java est le frame affich par DataServerApp.
Installation de lapplication exemple
Pour excuter lapplication exemple, voici les tapes suivre :
1 Ouvrez cette application dans JBuilder en choisissant Fichier|Ouvrir et
en naviguant jusqu /samples/DataExpress/StreamableDataSets/
DataSetData.jpx.
2 Choisissez Projet|Proprits du projet et dfinissez les options
dexcution de lapplication :
a Slectionnez longlet Excution.
b Slectionnez la configuration dexcution avec DataServerApp
(propose par dfaut) et cliquez sur Modifier pour ouvrir la bote
de dialogue Proprits de configuration dexcution.
c Vrifiez que les proprits du champ Paramtres VM indiquent le
chemin daccs correct.
La proprit java.rmi.server.codebase pointe sur lemplacement des
classes du serveur RMI. Par dfaut, cette proprit est dfinie de la
manire suivante :
-Djava.rmi.server.codebase="file:
/usr/local/jbuilder/samples/DataExpress/StreamableDataSets/classes/
file:/usr/local/jbuilder/lib/dx.jar"
La proprit java.rmi.server.codebase pointe sur lemplacement
correct des classes du serveur RMI. Par dfaut, cette proprit est
dfinie de la manire suivante :
-Djava.security.policy=file:/usr/local/jbuilder/samples/DataExpress/
StreamableDataSets/SampleRMI.policy
d Fermez la bote de dialogue Proprits du projet.
3 Dmarrez le registre RMI en choisissant Outils|Registre RMI dans
JBuilder.
Le registre est activ et dsactiv partir du menu Outils.
4 Dans le volet projet, cliquez avec le bouton droit sur DataServerApp.java,
puis choisissez Excuter|Excuter DataServerApp pour dmarrer le
serveur RMI.
5 Dans le volet projet, cliquez avec le bouton droit sur ClientApp.java,
puis choisissez Excuter|Excuter ClientApp pour dmarrer le
client RMI.
14-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l i c a t i o n d e l e x e m p l e d a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e
6 Modifiez les donnes dans la table de ClientApp, puis cliquez sur le
bouton Enregistrer les modifications de la barre doutils (pour
enregistrer les modifications sur le serveur) ou sur le bouton Rafrachir
de la barre doutils (pour recharger les donnes depuis le serveur).
Chaque fois que les donnes sont enregistres ou rafrachies, le
compteur de requtes intermdiaires est incrment.
Que se passe-t-il ?
DataServerApp se recense lui-mme en tant que serveur RMI. Il rpond
deux requtes client RMI : provideEmployeeData et resolveEmployeeChanges,
dfinies dans linterface distante RMI EmployeeApi.java.
Lapplication client se compose dun cadre (ClientFrame.java) et de
composants dbSwing JdbTable et JdbNavToolBar pour laffichage des
donnes dans un TableDataSet DataExpress. Les donnes sont fournies au
TableDataSet via un fournisseur personnalis, ClientProvider.java, et les
donnes sont enregistres dans la source via un rsolveur personnalis,
ClientResolver.java. ClientProvider.java remplit ses donnes de table en
invoquant la mthode distante provideEmployeeData() de DataServerApp
via RMI. DataServerApp demande ensuite des donnes, partir dune table
situe sur un serveur de bases de donnes JDBC, qui sont regroupes dans
un DataSet. Il extrait ensuite les donnes du DataSet et les place dans un
objet DataSetData puis les renvoie au ClientProvider via RMI. ClientProvider
charge ensuite les donnes situes dans lobjet DataSetData dans le DataSet
de ClientApp, puis les donnes saffichent dans la table.
Au moment de rsoudre les modifications de la table dans la base de
donnes, le rsolveur personnalis du DataSet de ClientApp,
ClientResolver.java, extrait (uniquement) les modifications qui doivent
tre envoyes au serveur de bases de donnes dans un objet DataSetData.
ClientResolver invoque ensuite la mthode distante
resolveEmployeeChanges() de DataServerApp via RMI, en lui transmettant
comme paramtre lobjet DataSetData contenant les mises jour
ncessaires.
DataServerApp utilise ensuite DataExpress pour rsoudre les modifications
dans le serveur de bases de donnes. En cas derreur (en raison dune
rgle de mtier ou dune violation de contrainte de donnes, par exemple),
DataServerApp empaquette les lignes qui nont pas pu tre enregistres dans
la base de donnes dans un objet DataSetData quil renvoie au
ClientResolver. ClientResolver extrait ensuite les lignes non rsolues se
trouvant dans lobjet DataSetData et les place dans la table de ClientApp afin
quelles puissent de nouveau tre corriges et rsolues dans le serveur.
Notez que DataServerApp est le niveau intermdiaire de lapplication. Il peut
imposer ses propres rgles et contraintes de mtier entre le serveur de
bases de donnes et le client. De plus, il peut, bien sr, offrir un nombre
C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e l a i d e d e D a t a S e t D a t a 14-5
E x p l i c a t i o n d e l e x e m p l e d a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e
quelconque de mthodes supplmentaires accessibles distance pour
limplmentation de tches de mtiers ou applicatives.
Transmission des mtadonnes par DataSetData
Les mtadonnes passes dans un objet DataSetData sont trs limites.
Seules les proprits de colonnes suivantes sont transmises :
columnName
dataType
precision
scale
hidden
rowId
Les autres proprits de colonnes quun serveur doit passer un client
doivent tre transmises en tant que tableau de Columns via RMI. Lobjet
Column lui-mme est srialisable, de sorte quune application client peut
tre conue pour obtenir ces proprits de colonnes avant quelle ait
besoin des donnes. Les colonnes doivent tre ajoutes en tant que
colonnes persistantes avant le chargement de DataSetData.
Dploiement de lapplication sur plusieurs niveaux
Pour dployer lapplication sur plusieurs niveaux,
1 Ouvrez DataServerApp.java et changez lURL de connexion la base de
donnes dans le constructeur afin quelle pointe sur la connexion dune
base de donnes distante laquelle vous avez accs.
La base de donnes constitue lextrmit dorsale, ou troisime niveau.
2 Choisissez Projet|Construire le projet pour recompiler et mettre jour
la classe DataServerApp.
3 Dployez DataServerApp.class sur une machine distante laquelle vous
tes connect.
DataServerApp sexcute au deuxime niveau (niveau intermdiaire).
4 Dmarrez le registre RMI sur lordinateur du niveau intermdiaire.
5 Dmarrez DataServerApp au niveau intermdiaire.
Remarque A partir de JDK 1.2, il est ncessaire daccorder un serveur RMI des
droits de scurit particuliers afin quil puisse couter et accepter les
requtes de clients RMI via un rseau. Gnralement, ces droits sont
spcifis dans un fichier de stratgie de scurit Java dfini par une
proprit particulire, java.security.policy, transmise par un argument
de la ligne de commande la VM du serveur. Cette proprit est
similaire la proprit java.rmi.server.codebase qui doit galement tre
transmise la VM du serveur. Un fichier exemple de stratgie de
14-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l i c a t i o n d e l e x e m p l e d a p p l i c a t i o n d e b a s e d e d o n n e s d i s t r i b u e
scurit RMI permettant un client RMI de se connecter au serveur est
inclus dans ce projet dans le fichier SampleRMI.policy.
Lors du dmarrage de DataServerApp au niveau intermdiaire,
assurez-vous que les deux proprits java.security.policy et
java.rmi.server.codebase sont initialises aux emplacements corrects sur
la machine de niveau intermdiaire.
6 Double-cliquez sur ClientFrame.java dans le volet projet de JBuilder
pour louvrir dans le volet contenu. Slectionnez longlet Conception
pour invoquer le concepteur. Slectionnez clientProvider1 dans
larborescence des composants et donnez la proprit hostName le nom
de lhte de la machine de niveau intermdiaire.
7 Slectionnez clientResolver1 et donnez la proprit hostName le nom de
lhte de la machine de niveau intermdiaire.
8 Choisissez Projet|Construire le projet pour reconstruire ClientApp.
Dmarrez ClientAppsur le client, ou premier niveau, en cliquant avec le
bouton droit sur le fichier ClientApp.java dans le volet projet puis en
choisissant Excuter.
Pour plus dinformations
Lisez la documentation RMI du site web de Sun, ladresse
http://java.sun.com/j2se/1.4/docs/guide/rmi/.
Pour en savoir davantage sur lcriture de fournisseurs et de rsolveurs
personnaliss, consultez lapplication exemple densemble de donnes
/samples/DataExpress/CustomProviderResolver/CustomProviderResolver.jpx.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-1
C h a p i t r e
15
Chapitre15Administration dune base
de donnes
Ce chapitre donne des informations sur les tches courantes
dadministration de base de donnes. Les sujets suivants sont abords :
Exploration des tables et mtadonnes des bases de donnes en
utilisant le pilote de base de donnes
Utilisation du pilote de base de donnes pour ladministration de
bases de donnes
Surveillance des connexions aux bases de donnes
Exploration des tables et mtadonnes des bases de donnes en
utilisant le pilote de base de donnes
Le pilote de base de donnes est un navigateur hirarchique, permettant
dafficher et de modifier des donnes. Il prsente des mtadonnes JDBC
de bases de donnes dans une fentre deux volets. Le volet gauche
contient une arborescence qui affiche de faon hirarchique un ensemble
de bases de donnes et les tables, vues, procdures stockes et
mtadonnes associes. Le volet droit affiche sur plusieurs pages des
informations qui dcrivent chaque nud de larborescence. Dans certains
cas, il vous est galement possible de modifier les donnes du volet droit.
Pour afficher le pilote de base de donnes, choisissez Outils|Pilote de base
de donnes dans le menu JBuilder.
Chapter15Exploration
des tables et
mtadonnes
des bases de
donnes
15-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
Figure 15.1 Pilote de base de donnes
Via une connexion persistante une base de donnes, le pilote de base de
donnes vous permet de :
Parcourir et modifier les objets de schma dune base de donnes,
y compris les tables, donnes des tables, colonnes (champs), index, cls
primaires, cls trangres, dfinitions de procdures stockes et
paramtres des procdures stockes.
Voir, crer et modifier des URL de base de donnes.
Entrer et excuter des instructions SQL pour interroger une base de
donnes.
Crer, voir et modifier des donnes dans des tables existantes.
Parcourir les objets de schma dune base de donnes
La fentre du pilote de base de donnes possde un menu, une barre
doutils, un libell dtat et deux volets dinformations sur les bases de
donnes.
Le volet gauche affiche larborescence hirarchique des objets suivants :
URL, tables (et leurs colonnes, index, cl primaire et cls trangres),
vues, tables systme et procdures stockes (et leurs paramtres).
Une icne dextension ct dun objet du volet gauche indique que cet
objet contient dautres objets. Pour les voir, cliquez sur licne
dextension. Quand un objet est dvelopp, cest--dire quil montre ses
objets enfant, licne dextension est remplace par une icne de
rduction. Pour cacher les objets enfant, cliquez sur licne de
rduction.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-3
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
Le volet droit contient des pages onglets qui affichent le contenu des
objets mis en vidence dans le volet gauche. Les pages onglets du
volet droit varient selon le type de lobjet mis en vidence dans le volet
gauche. Par exemple, sil sagit dun alias de base de donnes, le volet
droit affiche une page Dfinition contenant les paramtres Type, PATH
et DRIVER NAME de la base de donnes, ou proprits. Les noms de
paramtres en gras signalent les paramtres qui ne peuvent pas tre
modifis. Tous les autres paramtres qui apparaissent dans le volet
droit peuvent tre modifis ici. Les pages onglet suivantes peuvent
apparatre dans le volet droit :
Dfinition
Saisie SQL
Rsum
Donnes
Pour davantage dinformations sur le pilote de base de donnes, dmarrez
le pilote de base de donnes en choisissant Outils|Pilote de base de
donnes dans le menu puis reportez-vous son aide en ligne, Pilote de base
de donnes.
Configuration des pilotes pour accder des bases de
donnes distantes ou locales
Le Pilote de base de donnes parcourt les bases de donnes numres
dans la section Connection URL History List du fichier <home>/.dbpilot/
dbpilot.properties. Cette liste reoit un nouvel lment quand vous vous
connectez une base de donnes en utilisant lditeur de la proprit
connection dun composant Database.
Vous pouvez utiliser le pilote de bases de donnes pour visualiser, crer,
modifier et supprimer des URL de base de donnes. Les procdures
suivantes supposent que lURL est ferme et dcrivent brivement les
tapes ncessaires pour accomplir les diffrentes tches.
Visualiser une URL
Pour afficher une URL,
1 Dans le volet gauche, choisissez lURL visualiser.
La page Dfinition apparat dans le volet de droite.
2 Cliquez sur licne dextension ct de lURL de la base de donnes
(ou double-cliquez dessus) dans le volet de gauche afin de visualiser
son contenu.
15-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
Crer une URL
Pour crer une URL,
1 Dans le volet de gauche, cliquez avec le bouton droit sur une URL ou
une base de donnes pour en afficher le menu contextuel.
2 Dans le menu contextuel (ou dans le menu Fichier), choisissez Nouveau
pour ouvrir la bote de dialogue Nouvelle URL.
3 Slectionnez un pilote dans la liste droulante, ou entrez ses
informations.
Pour pouvoir tre utiliss, les pilotes doivent tre installs, et les
fichiers du pilote doivent apparatre dans linstruction CLASSPATH du
script de configuration de JBuilder. Cette installation se fait sur la page
Pilotes base de donnes de la bote de dialogue Configuration
Entreprise (Outils|Configuration Entreprise).
4 Naviguez vers lURL dsire ou tapez-la, puis cliquez sur OK.
5 Dans la page Dfinition du volet droit, spcifiez le nom dutilisateur et
les autres proprits ncessaires.
6 Choisissez le bouton Appliquer dans la barre doutils afin dappliquer
les paramtres de connexion.
Modifier une URL
Pour modifier une URL existante,
1 Slectionnez dans le volet gauche lURL modifier.
2 Modifiez les paramtres de la page Dfinition selon vos souhaits.
3 Sur la barre doutils, cliquez sur le bouton Appliquer pour mettre jour
les paramtres de connexion, ou cliquez sur le bouton Annuler pour ne
pas prendre en compte les modifications apportes aux paramtres.
Supprimer une URL
Pour supprimer une URL,
1 Slectionnez dans le volet gauche lURL supprimer.
2 Choisissez Fichier|Supprimer pour supprimer lURL.
Remarque Si vous crez une nouvelle URL ODBC alors que vous travaillez sous
Windows NT, vous devez dfinir sa source de donnes ODBC via le
panneau de configuration Windows avant de pouvoir vous connecter la
base de donnes.
Excution dinstructions SQL
La page Saisie SQL affiche une fentre dans laquelle vous pouvez saisir
des instructions SQL ou spcifier et excuter un fichier .SQL existant. La
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-5
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
partie principale de lcran est une bote de saisie dans laquelle vous
pouvez saisir des instructions SQL. A droite de la bote de saisie se
trouvent quatre boutons, le bouton Excuter, le bouton Suivant, le bouton
Prcdent et le bouton Charger SQL. Quand une instruction SQL SELECT
est excute, le rsultat de la requte est affich dans une table modifiable
qui se trouve sous la bote de saisie. Il est possible de redimensionner cet
cran afin den visualiser tous les lments. La page se prsente ainsi :
Figure 15.2 Page Saisie SQL du pilote de base de donnes
Pour interroger une base de donnes en utilisant SQL,
1 Ouvrez une base de donnes en slectionnant son URL dans le volet
gauche puis entrez, si cest ncessaire, un nom dutilisateur et un mot
de passe.
2 Dans le volet gauche, slectionnez la base de donnes ou lun de ses
nuds enfant.
3 Cliquez sur longlet Saisie SQL dans le volet de droite afin dafficher la
bote de saisie dans laquelle vous allez pouvoir entrer ou slectionner
une instruction SQL.
4 Saisissez (ou collez) une instruction SQL dans la bote de saisie, ou
cliquez sur le bouton Charger SQL et saisissez un nom de fichier SQL.
Si vous entrez des instructions nemployant pas SELECT, linstruction
est excute mais il ny a pas de rsultats renvoys.
5 Cliquez sur le bouton Excuter pour excuter la requte.
Vous pouvez copier des instructions SQL depuis des fichiers texte, un
fichier daide Windows ou dautres applications puis les coller dans la
bote de saisie. Certains serveurs SQL exigent que le nom de table soit
plac entre guillemets et dautres pas.
15-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
Remarque Si la syntaxe SQL saisie est incorrecte, un message derreur est gnr.
Vous pouvez ensuite corriger votre guise les erreurs de syntaxe dans la
zone Saisie SQL.
Utilisation de lexplorateur pour visualiser ou modifier les
donnes des tables
Slectionnez la page Donnes pour afficher les donnes de la table, de la
vue ou du synonyme slectionn. Vous pouvez crer ou modifier des
enregistrements dune table dans la page Donnes si la table autorise un
accs en criture et si la case cocher Demander des requtes modifiables
du menu Voir|Options est coche. La page Donnes affiche une table
remplie avec les donnes de la table slectionne. Un contrle barre
doutils est affich au-dessus de la table afin de permettre le parcours et la
modification des donnes. La page Donnes a laspect suivant :
Vous pouvez utiliser le pilote de base de donnes pour visualiser,
modifier, ajouter ou supprimer les donnes des tables. Les procdures
suivantes indiquent les tapes ncessaires lexcution des diffrentes
tches.
Visualiser les donnes dune table :
Pour afficher des donnes dans une table,
1 Dans le volet gauche, slectionnez la table visualiser.
2 Cliquez sur longlet de la page Donnes du volet droit afin de visualiser
une table droulante affichant toutes les donnes de la table.
3 Utilisez les boutons de la barre doutils en haut de la table pour
parcourir les enregistrements.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-7
E x p l o r a t i o n d e s t a b l e s e t m t a d o n n e s d e s b a s e s d e d o n n e s
Modifier un enregistrement
Pour modifier un enregistrement,
1 Vrifiez que, dans la bote de dialogue Options (Voir|Options), sur la
page Requte, Demander des requtes modifiables est coch.
2 Modifiez les champs de lenregistrement dans la table.
3 Pour envoyer les modifications lensemble de donnes local,
slectionnez un enregistrement diffrent dans la table ou cliquez sur le
bouton Valider de la barre doutils propose sur la page Donnes.
4 Pour annuler une modification avant de changer denregistrement,
cliquez sur le bouton Annuler de la barre doutils ou appuyez sur Echap.
5 Pour enregistrer vos modifications dans la base de donnes, cliquez sur
le bouton Enregistrer les modifications.
Insrer un enregistrement
Pour insrer un nouvel enregistrement,
1 Slectionnez la ligne prcdant celle que vous souhaitez ajouter.
2 Cliquez sur le bouton Insrer dans la barre doutils de la page Donnes.
Une ligne vide apparat.
3 Entrez des donnes pour chaque colonne.
Changez de colonne en utilisant la souris ou en tabulant de champ en
champ.
4 Pour envoyer linsertion lensemble de donnes local, slectionnez un
enregistrement diffrent dans la table ou cliquez sur le bouton Valider
de la barre doutils propose sur la page Donnes.
5 Pour annuler une insertion avant de changer denregistrement,
choisissez le bouton Annuler de la barre doutils ou appuyez sur Echap.
6 Pour enregistrer une insertion dans la base de donnes, cliquez sur le
bouton Enregistrer les modifications.
Supprimer un enregistrement
Pour supprimer un enregistrement,
1 Placez le curseur sur la ligne supprimer.
2 Cliquez sur le bouton Supprimer.
3 Pour enregistrer une suppression de la base de donnes, cliquez sur le
bouton Enregistrer les modifications.
15-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d u p i l o t e d e b a s e d e d o n n e s p o u r l a d m i n i s t r a t i o n d e b a s e s d e d o n n e s
Utilisation du pilote de base de donnes pour ladministration de
bases de donnes
Cette section propose une introduction la cration, au remplissage et la
suppression de tables en utilisant SQL. Ces tches sont gnralement
rserves un administrateur de bases de donnes, mais peuvent
seffectuer simplement en utilisant JBuilder.
Cration de la source de donnes SQL
JBuilder est un environnement de dveloppement dapplication dans
lequel vous crez des applications accdant aux donnes de bases de
donnes, mais il ne propose pas doption de menu permettant la cration
de tables de serveur SQL. Cest gnralement une opration rserve
ladministrateur de bases de donnes. Il est nanmoins facile de crer des
tables en utilisant SQL et le pilote de base de donnes.
Cette section ne prtend pas tre un tutoriel du langage SQL mais indique
simplement la manire dutiliser des instructions SQL dans JBuilder. Pour
davantage dinformations sur la syntaxe SQL, reportez-vous lun des
nombreux livres traitant de ce sujet. En particulier A Guide to the SQL
Standard de C.J. Date.
Remarque Sur de nombreux systmes, ladministrateur de bases de donnes restreint
les droits de cration de tables aux utilisateurs autoriss. Si vous
rencontrez des problmes dans la cration de tables, contactez-le pour
vrifier si vos droits daccs sont suffisants pour effectuer cette opration.
Pour crer une table simple, vous devez tout dabord tablir une
connexion avec une URL de base de donnes. Si vous ntes pas familier
avec cette opration, procdez comme suit :
1 Choisissez Outils|Pilote de base de donnes.
2 Dans le pilote de base de donnes, choisissez Fichier|Nouveau ou
cliquez avec le bouton droit de la souris sur une URL existante et
choisissez Nouveau dans le menu contextuel.
La bote de dialogue Nouvelle URL souvre.
3 Slectionnez un pilote dans la liste droulante, ou entrez ses
informations.
Pour une prsentation des diffrents types de pilotes, voir Pilotes de
bases de donnes JDBC dans laide en ligne du pilote de base de
donnes.
4 Naviguez vers lURL dsire ou tapez-la.
Le bouton Parcourir est activ lorsquun pilote de base de donnes
reconnu par JBuilder est slectionn dans le champ Pilote.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-9
U t i l i s a t i o n d u p i l o t e d e b a s e d e d o n n e s p o u r l a d m i n i s t r a t i o n d e b a s e s d e d o n n e s
5 Cliquez sur OK pour fermer la bote de dialogue.
6 Spcifiez le nom dutilisateur et les autres proprits souhaites dans la
page Dfinition du volet de droite.
7 Cliquez sur le bouton Appliquer dans la barre doutils afin dappliquer
les paramtres de connexion.
Une fois une connexion tablie, vous pouvez spcifier une instruction SQL
excuter sur la base de donnes. Il y a deux moyens de le faire. Le
premier passe par le dialogue Cration dune table. Pour crer une table
nomme mytable en utilisant le dialogue Cration dune table,
1 Choisissez Fichier|Crer une table, dans le pilote de base de donnes.
2 Tapez mytable dans le champ Nom de table.
3 Cliquez sur le bouton Insrer.
4 Tapez lastName dans la colonne Nom de colonne.
5 Slectionnez VARCHAR comme valeur de la colonne Type de donnes.
6 Tapez 20 dans la colonne Prcision.
7 Cliquez sur le bouton Ligne suivante.
Une nouvelle ligne est cre.
8 Tapez firstName dans la colonne Nom de colonne.
9 Slectionnez VARCHAR comme valeur de la colonne Type de donnes.
10 Tapez 20 dans la colonne Prcision.
11 Cliquez sur le bouton Ligne suivante.
Une nouvelle ligne est cre.
12 Tapez salary dans la colonne Nom de colonne.
13 Slectionnez NUMERIC comme valeur de la colonne Type de donnes.
14 Tapez 10 dans la colonne Prcision.
15 Tapez 2 dans la colonne Echelle.
16 Cliquez sur le bouton Excuter.
17 Remarquez quune instruction SQL a t cre dans la zone de texte
SQL.
18 Cliquez sur OK.
La table est cre dans la source de donnes actuellement ouverte.
15-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
U t i l i s a t i o n d u p i l o t e d e b a s e d e d o n n e s p o u r l a d m i n i s t r a t i o n d e b a s e s d e d o n n e s
Le deuxime moyen de crer une table est de spcifier une instruction
SQL CREATE TABLE dans longlet Saisie SQL.
Par exemple, pour crer une table nomme mytable2 dans la source de
donnes laquelle vous tes connect :
1 Cliquez sur longlet Saisie SQL dans le pilote de base de donnes.
2 Entrez ce qui suit dans la zone de saisie :
create table mytable2 (
lastName char(20),
firstName char(20),
salary numeric(10,2) )
3 Cliquez sur le bouton Excuter.
Ces tapes crent une table vide qui peut tre utilise dans une requte.
Utilisez le pilote de base de donnes pour vrifier que la table a bien t
cre. Vous devez voir :
Une liste des tables de la source de donnes, y compris la nouvelle table
(MYTABLE) que vous venez de crer.
Une liste des colonnes de la table slectionne. Slectionnez MYTABLE,
la liste des colonnes affiche FIRSTNAME, LASTNAME et SALARY.
Remplissage dune table SQL en utilisant JBuilder
Une fois la table vide cre, il est facile de la remplir avec des donnes en
utilisant le pilote de base de donnes ou en crant une application laide
des outils de conception visuelle de JBuilder. Slectionnez la page
Donnes pour afficher les donnes de la table, de la vue ou du synonyme
slectionn. Dans la page Donnes du pilote de base de donnes, vous
pouvez ajouter ou modifier des enregistrements de la table si cette
dernire autorise un accs en criture et si la case Demander des requtes
modifiables de la bote de dialogue Voir|Options est coche. La page
Donnes affiche une table remplie avec les donnes de la table
slectionne.
1 Suivez les tapes de la rubrique Cration de la source de donnes
SQL, page 15-8.
2 Slectionnez dans le volet gauche la table que vous venez de crer, puis
slectionnez la page Donnes dans le volet de droite.
Une table remplie avec les donnes de la table slectionne apparat
dans le volet droit. Un contrle barre doutils est affich au-dessus de la
table afin de permettre le parcours et la modification des donnes.
3 Utilisez le pilote de base de donnes pour visualiser, modifier, insrer
et supprimer des enregistrements dans les tables.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-11
S u r v e i l l a n c e d e s c o n n e x i o n s a u x b a s e s d e d o n n e s
Voir Utilisation de lexplorateur pour visualiser ou modifier les
donnes des tables, page 15-6, pour plus dinformations sur
lutilisation du pilote de base de donnes pour afficher et modifier des
tables.
Suppression de tables dans JBuilder
Comme vous avez cr une ou plusieurs tables de test, il est ncessaire de
savoir comment faire place nette et supprimer toutes ces tables de test.
Pour ce faire, suivez les tapes de Cration de la source de donnes
SQL, page 15-8, en substituant linstruction SQL le texte suivant :
drop table mytable
Vous pouvez vrifier le bon fonctionnement de cette opration en
constatant la disparition de la table dans le volet gauche du pilote de base
de donnes.
Surveillance des connexions aux bases de donnes
JBuilder fournit une classe de surveillance JDBC qui peut suivre le trafic
JDBC. JBuilder fournit une interface utilisateur, appele par Outils|
Moniteur JDBC, pour fonctionner avec cette classe la conception. Pour
des informations sur lutilisation de cette classe en mode excution, voir
Utilisation du Moniteur JDBC dans une application en excution,
page 15-13.
Le moniteur JDBC suivra tous les pilotes JDBC (cest--dire toute
sous-classe de java.sql.Driver ) utiliss par JBuilder. Le Moniteur JDBC
surveille directement toutes les sorties du pilote JDBC.
A propos du Moniteur JDBC
Gnralement, le Moniteur JDBC sert surtout surveiller le trafic pendant
que vous dveloppez votre application de base de donnes.
Pour utiliser le Moniteur JDBC,
1 Choisissez Outils|Moniteur JDBC.
Le Moniteur JDBC apparat :
15-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
S u r v e i l l a n c e d e s c o n n e x i o n s a u x b a s e s d e d o n n e s
Figure 15.3 Moniteur JDBC
2 Ouvrez un fichier source contenant les composants daccs aux
donnes qui permettent la connexion avec une base de donnes, ce qui
dote le concepteur de donnes dynamiques.
Cest le cas de la plupart des classes Frame des exemples DataExpress
(<jbuilder>/samples/DataExpress), qui contiennent des composants
fournissant des donnes dynamiques en mode conception.
3 Cliquez sur longlet Conception pour afficher le concepteur.
Notez la faon dont le Moniteur JDBC affiche la base de donnes
lorsque le concepteur souvre.
Figure 15.4 Moniteur JDBC avec le rsultat
Vous pouvez accomplir les actions suivantes dans le Moniteur JDBC :
Choisissez le bouton Fermer dans la fentre du Moniteur JDBC pour
fermer le Moniteur JDBC.
Slectionnez le texte dans la zone historique en le mettant en vidence
avec la souris ou le clavier.
A d m i n i s t r a t i o n d u n e b a s e d e d o n n e s 15-13
S u r v e i l l a n c e d e s c o n n e x i o n s a u x b a s e s d e d o n n e s
Choisissez le bouton Enregistrer dans un fichier pour enregistrer dans
un fichier le texte slectionn (ou la totalit du texte si rien nest
slectionn).
Choisissez le bouton Effacer lhistorique pour effacer le texte
slectionn (ou la totalit du texte si rien nest slectionn).
Choisissez le bouton Activer la sortie historique pour activer/
dsactiver lhistorique.
Cliquez sur le bouton Taille de lhistorique pour dfinir la quantit
maximum dinformations conserver dans lhistorique (8 Ko par
dfaut).
Ayant positionn le curseur dans la zone de texte, appuyez sur F1 ou
sur le bouton Aide pour afficher laide du Moniteur JDBC. Laide est
disponible uniquement en mode conception.
Utilisation du Moniteur JDBC dans une application en
excution
Pour surveiller les connexions aux bases de donnes au cours de
lexcution, un MonitorButton ou un MonitorPanel doit tre inclus dans
lapplication. MonitorButton est un bean Java qui vous permet dexcuter le
Moniteur JDBC sur une application en excution. Pour cela, linstance du
Moniteur JDBC en utilisation doit tre amene par lapplication. Une
instance du Moniteur JDBC lance depuis lEDI ne pourra surveiller que
les activits de la base pendant la conception. Cliquer sur le bouton
Moniteur affiche une bote de dialogue contenant le Moniteur JDBC.
Le MonitorPanel peut tre utilis pour placer le moniteur directement sur
une fiche. Il a les mmes proprits que le MonitorButton.
Ajout du MonitorButton la palette
Vous pouvez placer le MonitorButton sur la palette des composants, en
procdant comme suit :
1 Choisissez Outils|Configurer la palette pour ouvrir la bote de
dialogue Proprits de la palette.
2 Slectionnez longlet Page puis, dans le volet gauche, slectionnez
DataExpress.
3 Slectionnez longlet Ajout de composants, puis cliquez sur
Slectionner la bibliothque pour ouvrir la bote de dialogue
Bibliothque diffrente.
4 Slectionnez JDBC dans la liste des bibliothques disponibles, puis
cliquez sur OK.
15-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
S u r v e i l l a n c e d e s c o n n e x i o n s a u x b a s e s d e d o n n e s
5 Si la liste droulante Page de palette qui reoit les composants naffiche
pas DataExpress, slectionnez-le.
Cest ce qui dtermine la page de la palette sur laquelle sera plac le
bouton MonitorPanel.
6 Parmi les boutons radio Filtrage de composant, slectionnez Pas de
filtrage.
7 Cliquez sur Ajouter depuis la bibliothque slectionne pour ouvrir la
bote de dialogue Parcourir pour rechercher une classe.
8 Allez jusqu com.borland.jbcl.sql.monitor.MonitorButton et cliquez sur
OK pour ajouter le composant.
9 Cliquez sur OK pour fermer la bote de dialogue Rsultats.
10 Cliquez sur OK pour fermer la bote de dialogue Proprits de la
palette.
Utilisation de la classe MonitorButton dans le code
Une fois que le MonitorButton est sur la palette, il peut tre plac dans votre
application. Vous pourriez aussi ajouter une instance de MonitorButton
dans le code, comme ceci :
MonitorButton monitorButton1 = new
com.borland.jbcl.sql.monitor.MonitorButton();
this.add(monitorButton1);
Proprits de MonitorButton
Les proprits suivantes sont disponibles pour le MonitorButton afin de
contrler ltat par dfaut du moniteur :
Proprit Effet
outputEnabled Active ou dsactive la surveillance du pilote.
maxLogSize Taille maximum de lhistorique de suivi. La valeur par
dfaut est de 8 Ko.
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-1
C h a p i t r e
16
Chapitre16Tutoriel : Importation
et exportation des donnes
dun fichier texte
Ce tutoriel dcrit la manire de fournir des donnes une application en
utilisant un composant TableDataSet et un fichier de donnes texte. Pour ce
tutoriel, nous crerons manuellement le fichier texte, mais ce type de
fichier peut tre export depuis la majorit des bases de donnes
bureautiques. Dans ce tutoriel, nous allons excuter les tches suivantes :
Crer un projet JBuilder
Crer un fichier de donnes texte simple
Gnrer une application
Ajouter des composants DataExpress pour accder et stocker les
donnes dun fichier texte
Ajouter des composants dbSwing pour crer linterface utilisateur
Ajouter un composant Swing JButton pour exporter les donnes
Compiler et excuter votre programme
Utiliser des modles pour exporter des champs numriques, date/
heure et texte
16-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 1 : C r a t i o n d u p r o j e t
Une fois ce tutoriel achev, lapplication doit avoir laspect suivant :
Figure 16.1 Application dimportation/exportation
Vous pouvez consulter lapplication complte en ouvrant le fichier projet
exemple, TextFileImportExport.jpx qui se trouve dans <jbuilder>/samples/
DataExpress/TextFileImportExport/. Les utilisateurs pour qui laccs aux
exemples de JBuilder est limit la lecture doivent copier le rpertoire
samples dans un rpertoire dont ils possdent les droits de lecture et
dcriture.
La section Tutoriels dans les Astuces JBuilder donne des informations sur
la visualisation et limpression des tutoriels. La section Options
daccessibilit des Astuces JBuilder contient des conseils permettant de
simplifier laccs aux fonctionnalits de JBuilder, destins en particulier
aux personnes ayant des difficults.
Pour plus dinformations sur les conventions de la documentation de ce
tutoriel et des autres documents JBuilder, voir Conventions de la
documentation, page 1-8.
Etape 1 : Cration du projet
Pour dvelopper votre application de base de donnes dans JBuilder, vous
devez dabord crer un nouveau projet. Pour ce faire,
1 Choisissez Fichier|Nouveau projet pour afficher lexpert projet.
2 Tapez TextFileImportExport dans le champ Nom.
3 Assurez-vous que loption Crer le fichier de remarques du projet est
coche.
4 Cliquez sur le bouton Terminer pour fermer lexpert et crer le projet.
Vous navez pas modifier les valeurs par dfaut des tapes 2 et 3
de lexpert.
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-3
E t a p e 2 : C r a t i o n d u f i c h i e r t e x t e
Le fichier projet TextFileImportExport.jpx et le fichier HTML du projet
sont affichs dans le volet projet.
Etape 2 : Cration du fichier texte
Nous allons crer un fichier de donnes texte simple pour importer les
donnes quil contient dans votre application. Crez le fichier texte en
suivant les tapes ci-dessous :
1 Crez un nouveau fichier texte, nomm ImportTest.txt, dans le
rpertoire contenant le fichier projet cr ltape prcdente,
TextFileImportExport.jpx.
Choisissez Fichier|Nouveau fichier pour ouvrir la bote de dialogue de
cration dun fichier. Dans le champ Nom, entrez ImportTest.
Slectionnez txt dans la liste droulante Type. Vrifiez que le champ
Rpertoire est dfini par le rpertoire o se trouve
TextFileImportExport.jpx.
2 Saisissez les trois lignes et deux colonnes (une colonne de valeurs
entires et une colonne de valeurs chane) de donnes suivantes dans le
nouveau fichier texte.
Appuyez sur Entre la fin de chaque ligne. Vous devez saisir les
donnes ainsi que les virgules et les guillemets.
1,"A"
2,"B"
3,"C"
3 Enregistrez et fermez le fichier.
4 Ajoutez le fichier votre projet (Projet|Ajouter des fichiers/paquets).
Dans la page Explorateur de la bote de dialogue Ajout de fichiers ou
paquets au projet, naviguez jusquau rpertoire contenant le fichier,
slectionnez-le et cliquez sur OK pour lajouter votre projet.
Etape 3 : Gnration dune application
Lexpert application cre les fichiers source Java qui seront ajouts au
projet que vous venez de crer.
Pour gnrer les fichiers source de votre application en utilisant lexpert
application, procdez comme suit :
1 Choisissez Fichier|Nouveau pour ouvrir la galerie dobjets.
2 Slectionnez longlet Gnral et double-cliquez sur licne Application
pour ouvrir lexpert application.
16-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 4 : A j o u t d e c o m p o s a n t s D a t a E x p r e s s v o t r e a p p l i c a t i o n
3 Acceptez les valeurs par dfaut de ltape 1 de lexpert application et
cliquez sur Terminer.
Les nouveaux fichiers source Java sont ajouts votre projet et affichs
en tant que nuds dans le volet projet. Le code source de Cadre1.java
est ouvert dans le volet contenu.
4 Choisissez Fichier|Tout enregistrer pour enregistrer les fichiers source
et le fichier projet.
Etape 4 : Ajout de composants DataExpress votre application
Le concepteur dinterface utilisateur est utilis pour ajouter les
composants DataExpress Cadre1.java.
1 Slectionnez longlet Conception pour le fichier Cadre1.java dans le
volet contenu.
2 Slectionnez un composant TextDataFile dans la page DataExpress de la
palette de composants, cliquez dans larborescence des composants ou
dans le concepteur dinterface utilisateur pour ajouter le composant
votre application.
Le nouveau composant TextDataFile, textDataFile1, apparat dans le
volet structure sous la forme dun nud de larborescence des
composants.
3 Slectionnez les proprits suivantes dans linspecteur et dfinissez
leurs valeurs comme indiqu :
Pour dfinir la proprit fileName, slectionnez le champ droite du
nom de la proprit, et cliquez sur bouton points de suspension (...)
pour ouvrir la bote de dialogue FileName. Cliquez sur le bouton points
de suspension (...) dans la bote de dialogue FileName, naviguez
jusquau fichier ImportTest.txt, slectionnez-le et cliquez sur Ouvrir.
Cliquez sur OK pour fermer la bote de dialogue FileName.
Pour un fichier texte, le dlimiteur est le caractre servant dfinir le
dbut et la fin dun champ chane. Par dfaut, le guillemet est utilis
comme dlimiteur des types de donnes chane. Pour ce tutoriel, il nest
pas ncessaire deffectuer de modification.
Nom de la proprit Valeur
delimiter " (guillemet)
separator , (virgule)
fileName <chemin_fichier_donnes_texte> (le chemin daccs
ImportTest.txt, y compris le nom du fichier)
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-5
E t a p e 4 : A j o u t d e c o m p o s a n t s D a t a E x p r e s s v o t r e a p p l i c a t i o n
Pour un fichier texte, le sparateur (separator) est le caractre servant
sparer les diffrentes valeurs des colonnes. Par dfaut, la tabulation
(/t) est utilise comme sparateur. Pour cet exemple, le sparateur est
une virgule (,). Selon le fichier que vous importez, modifiez ces
proprits en consquence.
Spcifiez le nom de fichier et le chemin daccs complet pour le champ
fileName.
4 Slectionnez un composant TableDataSet dans la page DataExpress de la
palette de composants, cliquez dans larborescence des composants ou
dans le concepteur dinterface utilisateur pour ajouter le composant
votre application.
5 Slectionnez le composant et initialisez sa proprit dataFile en lui
affectant la valeur textDataFile1.
6 Ajoutez des colonnes au composant TableDataSet.
Ce tutoriel dcrit la manire dajouter des colonnes lensemble de
donnes en utilisant le concepteur dinterface utilisateur. Pour ajouter
des colonnes en utilisant lditeur, voir Ajout de colonnes un
TableDataSet en utilisant lditeur, page 3-2. Si vous avez achev le
tutoriel prcdent, JBuilder a cr un fichier SCHEMA (.schema)
donnant une dfinition des colonnes lors de louverture du fichier et il
nest donc pas ncessaire dajouter manuellement les colonnes.
a Cliquez sur licne dextension gauche du composant TableDataSet
afin dafficher les colonnes existantes.
En ce cas, il nexiste pas de colonne.
b Slectionnez <nouvelle colonne> et dfinissez dans linspecteur les
proprits suivantes pour la nouvelle colonne :
c Slectionnez nouveau <nouvelle colonne> et dfinissez dans
linspecteur les proprits suivantes pour la seconde colonne :
7 Choisissez Fichier|Tout enregistrer pour enregistrer les fichiers source
et le fichier projet.
Nom de la proprit Valeur
dataType SHORT
caption my_number
columnName my_number
Nom de la proprit Valeur
dataType STRING
caption my_string
columnName my_string
16-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
Les composants fondamentaux permettant dextraire et de stocker les
donnes de votre fichier texte sont en place. Nous allons maintenant
crer linterface utilisateur pour afficher et modifier ces donnes.
Etape 5 : Ajout de composants dbSwing pour crer linterface
utilisateur
Vous tes maintenant prt crer une interface utilisateur pour votre
application de base de donnes. Le moyen le plus rapide de le faire est
dutiliser les composants dbSwing dans le concepteur dinterface
utilisateur.
Remarque Lors de la dfinition dune interface utilisateur, la premire tape consiste
normalement choisir une disposition approprie lapplication
(comment seront visuellement arrangs les composants et quel
gestionnaire de disposition Java vous utiliserez pour contrler ces
positions.) Mais, apprendre utiliser les gestionnaires de disposition Java
est en soit une tche ardue. Donc, pour laisser ce tutoriel ax sur la
cration dune application de base de donnes, nous utiliserons la
disposition par dfaut (BorderLayout) et contrlerons la position des
composants en dfinissant leur proprit constraints.
Pour plus dinformations sur lutilisation des dispositions, voir
Utilisation du concepteur et Utilisation des gestionnaires de
disposition dans Conception dapplications avec JBuilder.
Les tapes ci-aprs ajoutent lapplication les composants dinterface
utilisateur suivants partir de longlet dbSwing de la palette de
composants :
JdbTable (et conteneur), pour afficher des donnes bi-dimensionnelles
dans un format de type feuille de calcul.
JdbNavToolBar, ensemble de boutons pour vous aider naviguer dans les
donnes affiches dans une JdbTable. Il vous permet de naviguer
rapidement dans lensemble de donnes lorsque lapplication est
excute.
JdbStatusLabel, qui affiche des informations sur lenregistrement ou
lopration en cours et les messages derreur.
Vous ajouterez ces composants contentPane (BorderLayout), qui est un
JPanel, et le conteneur principal de linterface utilisateur, dans lequel vous
allez disposer les composants visuels.
1 Slectionnez la page dbSwing de la palette de composants dans le
concepteur dinterface utilisateur.
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-7
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
2 Slectionnez le composant JdbNavToolBar et cliquez sur la zone centrale
proche du bord suprieur du panneau dans le concepteur dinterface
utilisateur.
Une instance de JdbNavToolBar, appele jdbNavToolBar1, est ajoute au
panneau et apparat dans larborescence des composants. Par dfaut, le
composant JdbNavToolBar dtecte automatiquement les autres
composants orients donnes du mme conteneur racine (tels que
JFrame), et se dplace dans lensemble de donnes du composant ayant
actuellement la focalisation. Vous navez donc pas besoin de dfinir la
proprit constraints de jdbNavToolBar1 dans linspecteur.
jdbNavToolBar1 est dsormais le composant slectionn, et stend le long
du bord suprieur du panneau. Ne vous inquitez pas sil est plac
dans un endroit diffrent que celui attendu. Le gestionnaire de
disposition dtermine lemplacement en fonction de lendroit o vous
cliquez. Si vous tes trop prs de la gauche, de la droite ou du centre du
panneau, il peut croire que vous voulez placer le composant ailleurs.
Vous le corrigerez ltape suivante.
3 Regardez la proprit constraints de jdbNavToolBar1 dans linspecteur.
Sa valeur doit tre NORTH. Si ce nest pas le cas, cliquez une fois sur
cette valeur pour afficher une liste droulante, et slectionnez North
dans la liste.
4 Slectionnez le composant JdbStatusLabel et cliquez sur la zone centrale
proche du bord suprieur du panneau dans le concepteur dinterface
utilisateur.
Une instance de JdbStatusLabel, appele jdbStatusLabel1, est ajoute au
panneau et apparat dans larborescence des composants. La proprit
constraints de jdbStatusLabel1 doit avoir la valeur SOUTH. Si ce nest
pas le cas, changez-la dans linspecteur. jdbStatusLabel1 sattache
automatiquement au DataSet qui dtient la focalisation.
5 Slectionnez un composant TableScrollPane de la page dbSwing de la
palette de composants, cliquez au centre du concepteur dinterface
utilisateur pour ajouter le composant votre application.
Le composant TableScrollPane, tableScrollPane1, apparat dans le volet
structure sous la forme dun nud de larborescence des composants.
6 Slectionnez un composant JdbTable de la page dbSwing de la palette de
composants, cliquez dans larborescence des composants ou dans le
concepteur dinterface utilisateur pour ajouter le composant votre
application.
Le composant JdbTable, jdbTable1, apparat dans le volet structure sous
la forme dun nud de larborescence des composants, sous
tableScrollPane1.
7 Donnez la valeur tableDataSet1 la proprit dataSet du jdbTable1.
16-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 6 : A j o u t d u n c o m p o s a n t S w i n g J B u t t o n
Lorsque vous dfinissez la proprit dataSet du jdbTable1 par
tableDataSet1, les donnes du fichier texte apparaissent dans le
concepteur dinterface utilisateur :
Une bote de dialogue derreur est affiche si vous navez pas spcifi le
fichier de donnes correct ou si les colonnes nont pas bien t dfinies.
Si vous ninstanciez pas de composant visuel pour afficher les donnes,
il faut ouvrir explicitement le fichier dans le code source pour accder
aux donnes.
8 Choisissez Excuter|Excuter le projet pour compiler et excuter
lapplication.
Lapplication en train de sexcuter ressemble ceci :
Figure 16.2 Application dimportation/exportation lexcution
9 Fermez lapplication excute.
Quand cette application est excute, les donnes du fichier texte sont
charges dans le TableDataSet et affiches dans le composant table visuel
qui lui est associ. Vous pouvez alors visualiser les donnes, les modifier,
ajouter ou supprimer des donnes de lensemble de donnes. Un
composant TableDataSet peut tre utilis comme table matre ou comme
table dtail dans une relation matre-dtail. Pour enregistrer les
modifications dans le fichier texte, vous devez y exporter les donnes.
Pour davantage dinformations sur lexportation, voir Exportation des
donnes, page 3-3.
Etape 6 : Ajout dun composant Swing JButton
Le composant Swing JButton servira exporter les donnes lors de
lexcution de lapplication. Lexportation de donnes, ou lenregistrement
de donnes dans un fichier texte, enregistre toutes les donnes de la vue en
cours dans un fichier texte, en remplaant les donnes existantes. Dans ce
tutoriel, nous effectuerons la rsolution des donnes depuis un
TableDataSet dans le fichier texte utilis au dpart pour importer les
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-9
E t a p e 6 : A j o u t d u n c o m p o s a n t S w i n g J B u t t o n
donnes. Quand des donnes sont exportes dans un fichier texte, toutes
les donnes de la vue en cours sont crites dans un fichier texte et les
informations dtat des lignes ne sont pas modifies.
1 Slectionnez longlet Conception du volet contenu.
2 Slectionnez contentPane (BorderLayout) dans le volet contenu. Modifiez
sa proprit layout en null dans linspecteur.
3 Slectionnez tableScrollPane1 dans larborescence des composants.
Slectionnez la poigne suprieure du composant dans le concepteur
dinterface utilisateur, et redimensionnez-le pour laisser la place
dajouter un bouton.
Voir la capture dcran de lapplication excute plus loin dans ce
tutoriel pour connatre le placement gnral des composants.
4 Ajoutez un composant JButton depuis longlet Swing dans le
concepteur dinterface utilisateur. Sur la page Proprits de
linspecteur, dfinissez la proprit text de ce composant JButton par
Enregistrer les modifications.
5 Cliquez longlet Evnements de linspecteur et slectionnez la mthode
actionPerformed() puis double-cliquez dessus.
Cela fait passer la focalisation dans lAppBrowser de longlet
Conception longlet Source et affiche dans le code source le squelette
de la mthode actionPerformed().
Ajoutez le code suivant la mthode actionPerformed() :
try {
tableDataSet1.getDataFile().save(tableDataSet1);
System.out.println("Modifications enregistres");
}
catch (Exception ex) {
System.out.println("Modifications NON enregistres");
System.err.println("Exception : " + ex);
}
16-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 7 : C o m p i l a t i o n e t e x c u t i o n d e v o t r e a p p l i c a t i o n
Figure 16.3 Application dimportation/exportation avec un JButton
6 Choisissez Fichier|Tout enregistrer pour enregistrer les fichiers source
et le fichier projet.
Etape 7 : Compilation et excution de votre application
Lorsque vous compilez et excutez votre application, elle affiche un
bouton Enregistrer les modifications servant exporter les donnes.
Quand vous exportez les donnes dun TableDataSet dans un fichier texte,
JBuilder cre un fichier SCHEMA (.schema) qui dfinit les colonnes par
nom et par type de donne. La prochaine fois que vous importerez les
donnes dans JBuilder, il ne sera pas ncessaire de dfinir les colonnes,
puisque ces informations seront dj spcifies dans le fichier SCHEMA.
1 Excutez lapplication en choisissant Excuter|Excuter le projet.
Quand vous excutez lapplication, lapplication apparat dans sa
propre fentre. Les donnes sont affiches dans une table avec un
bouton Enregistrer les modifications.
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-11
E t a p e 7 : C o m p i l a t i o n e t e x c u t i o n d e v o t r e a p p l i c a t i o n
Figure 16.4 Exportation de donnes vers un fichier texte lors de lexcution de
lapplication
2 Lapplication sexcutant, slectionnez le champ chane dans le premier
enregistrement et modifiez la valeur du champ de A en Apple.
3 Enregistrez les modifications dans le fichier texte en cliquant sur le
bouton Enregistrer les modifications.
4 Ouvrez ImportTest.txt dans le volet contenu, remarquez quil contient
dsormais les donnes suivantes :
1,"Apple"
2,"B"
3,"C"
5 Fermez le fichier texte.
JBuilder cre automatiquement un fichier SCHEMA afin de dfinir le
contenu du fichier texte.
6 Visualisez le fichier SCHEMA dans un diteur de texte. Remarquez que
ce fichier contient des informations sur les noms des champs exports
et le type des donnes exportes dans ce champ. Il ressemble ceci :
[]
FILETYPE = VARYING
FILEFORMAT = Encoded
ENCODING = Cp1252
DELIMITER = "
SEPARATOR = ,
FIELD0 = my_number,Variant.SHORT,-1,-1,
FIELD1 = my_string,Variant.STRING,-1,-1,
7 Fermez le fichier SCHEMA.
Vous pouvez continuer modifier, insrer, supprimer et enregistrer des
donnes jusqu la fermeture de lapplication, mais vous devez cliquer sur
le bouton Enregistrer les modifications pour rcrire les modifications
dans le fichier texte. Lorsque vous enregistrez les modifications, le fichier
existant est remplac par les donnes de la vue en cours.
16-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 8 : U t i l i s a t i o n d e m o d l e p o u r l e x p o r t a t i o n d e c h a m p s n u m r i q u e s , d a t e / h e u r e
Etape 8 : Utilisation de modle pour lexportation de champs
numriques, date/heure et texte
Par dfaut, JBuilder attend la saisie de donnes et exporte les donnes des
champs date, heure et montaire en fonction de la proprit locale de la
colonne. Vous pouvez utiliser la proprit exportDisplayMask pour lire ou
enregistrer les champs date, heure ou numriques en utilisant un modle
diffrent. Les tapes suivantes illustrent la cration dun objet
exportDisplayMask pour une nouvelle colonne de type DATE.
1 Slectionnez Cadre1.java dans le volet contenu, puis slectionnez
longlet Conception. Dveloppez tableDataSet1 dans larborescence des
composants en cliquant sur licne dextension sa gauche.
Slectionnez <nouvelle colonne>, puis modifiez les proprits de la
colonne dans linspecteur de la manire suivante :
dataType en DATE
caption et columnName en my_date
2 Excutez lapplication. Dans la fentre de lapplication en cours
dexcution, entrez une date dans la colonne my_date de la premire
ligne. Par dfaut, vous devez saisir les dates au format jj/MM/aa, par
exemple 16/11/95. Cliquez sur le bouton Enregistrer les modifications
pour enregistrer les modifications dans le fichier texte.
3 Visualisez le fichier texte dans un diteur de texte. Il contient
maintenant les donnes suivantes :
1,"Apple",1995-11-16
2,"B"
3,"C"
4 Fermez le fichier texte.
5 Visualisez le fichier SCHEMA dans un diteur de texte. Remarquez que
le nouveau champ date a t ajout dans la liste de champs. Il ressemble
ceci :
[]
FILETYPE = VARYING
FILEFORMAT = Encoded
ENCODING = Cp1252
DELIMITER = "
SEPARATOR = ,
FIELD0 = my_number,Variant.SHORT,-1,-1,
FIELD1 = my_string,Variant.STRING,-1,-1,
FIELD2 = my_date,Variant.DATE,-1,-1,
6 Fermez le fichier SCHEMA.
T u t o r i e l : I m p o r t a t i o n e t e x p o r t a t i o n d e s d o n n e s d u n f i c h i e r t e x t e 16-13
E t a p e 8 : U t i l i s a t i o n d e m o d l e p o u r l e x p o r t a t i o n d e c h a m p s n u m r i q u e s , d a t e / h e u r e
Les tapes suivantes montrent ce qui se passe lorsque vous modifiez le
modle date, ditez les donnes et enregistrez nouveau les
modifications.
1 Fermez lapplication excute et le fichier texte et revenez au
concepteur dinterface utilisateur de JBuilder. Slectionnez la colonne
my_date et entrez le modle suivant pour la proprit exportDisplayMask
dans linspecteur : MM-jj-aaaa. La syntaxe des modles est dfinie dans
Modles base de chane (masques), dans la Rfrence de la
bibliothque de composants DataExpress. Ce type de modle va crire le
champ date sous la forme suivante : 11-16-1995.
2 Lapplication produit maintenant une erreur si vous tentez de
lexcuter car le format de donnes dans le fichier texte ne correspond
pas celui que lapplication tente dutiliser. Modifiez manuellement le
fichier texte et supprimez la valeur ,11/16/95 de la premire ligne.
Au lieu dutiliser ltape ci-dessus, vous pouvez entrer manuellement
du code tablissant un exportDisplayMask pour limportation de donnes
et un autre exportDisplayMask pour lexportation de donnes.
3 Excutez lapplication, entrez une date, comme 16/11/1995, dans la
colonne my_date de la premire ligne et cliquez sur le bouton
Enregistrer les modifications pour enregistrer les modifications dans le
fichier texte.
4 Visualisez le fichier texte dans un diteur de texte. Il contient
maintenant les donnes suivantes :
1,"Apple",11-16-1995
2,"B"
3,"C"
5 Fermez le fichier texte.
6 Visualisez le fichier SCHEMA dans un diteur de texte. Remarquez que
le format de champ date est affich dans la dfinition du champ.
Lorsque le format par dfaut est utilis, cette valeur est vide puisquil
se trouve dans la dfinition FIELD0. Il ressemble ceci :
[]
FILETYPE = VARYING
FILEFORMAT = Encoded
ENCODING = Cp1252
DELIMITER = "
SEPARATOR = ,
FIELD0 = my_number,Variant.SHORT,-1,-1,
FIELD1 = my_string,Variant.STRING,-1,-1,
FIELD2 = my_date,Variant.DATE,-1,-1,MM-jj-aaaa
7 Fermez le fichier SCHEMA.
A la prochaine importation du fichier de donnes texte, les donnes
sont importes en utilisant les informations du fichier SCHEMA.
16-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 8 : U t i l i s a t i o n d e m o d l e p o u r l e x p o r t a t i o n d e c h a m p s n u m r i q u e s , d a t e / h e u r e
Pour visualiser les donnes dans une table en utilisant un modle
diffrent, utilisez la proprit displayMask. Pour diter les donnes en
utilisant un autre modle, dfinissez la proprit editMask. Ces proprits
affectent uniquement la visualisation et la modification des donnes et pas
la manire dont elles sont enregistres. Par exemple, pour saisir des
donnes dans un champ montaire sans avoir saisir le symbole
montaire chaque fois, utilisez un displayMask qui utilise le symbole
montaire et un editMask ne contenant pas de symbole montaire. En
initialisant la proprit exportDisplayMask, vous pouvez choisir
denregistrer les donnes dans le fichier texte en utilisant ou pas le
symbole montaire.
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-1
C h a p i t r e
17
Chapitre17Tutoriel : Cration dune
application de base de donnes
lmentaire
Ce tutoriel explique comment dvelopper une application de base de
donnes en utilisant les composants DataExpress et les outils de
conception JBuilder. Quand cest ncessaire, le code gnr par les outils
de conception sera modifi pour proposer des comportements
personnaliss.
Cette application illustre les fonctionnalits suivantes :
La connexion la base de donnes exemple JDataStore, employee.jds, en
utilisant des composants Database et QueryDataSet. Voir Chapitre 4,
Connexion une base de donnes et Interrogation dune base de
donnes, page 5-2.
Elle contient un contrle JdbTable qui affiche les donnes et illustre les
caractristiques suivantes :
Les colonnes persistantes. Ce sont des colonnes dont les
informations de structure (normalement obtenues du serveur) sont
spcifies dans les proprits de la colonne. Cette faon de procder
permet damliorer les performances et assure la persistance des
proprits de colonne. Pour davantage dinformations, voir
Colonnes persistantes, page 7-8. Dans le concepteur,
double-cliquez sur lensemble de donnes pour ouvrir le concepteur
de colonne et voir davantage dinformations sur chaque colonne.
Le formatage des donnes affiches dans JdbTable laide de
masques daffichage (la colonne HIRE_DATE). Pour davantage
17-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e
dinformations, voir Ajout de modles daffichage ou de
modification pour formater les donnes, page 12-16.
La modification de donnes contrle par des masques de saisie (la
colonne HIRE_DATE). Pour davantage dinformations, voir Ajout
de modles daffichage ou de modification pour formater les
donnes, page 12-16.
Les champs calculs et rcapitulatifs qui obtiennent leur valeur du
rsultat de lvaluation dune expression (les colonnes
NEW_SALARY, ORG_TOTAL, NEW_TOTAL, DIFF_SALARY et
DIFF_TOTAL). Pour davantage dinformations, voir Utilisation de
colonnes calcules, page 12-8.
Elle inclut un contrle JdbStatusLabel qui affiche des informations de
navigation, des messages de validation des donnes, etc. Les messages
sont crits dans le contrle JdbStatusLabel lorsque cela est appropri ou
lorsque une instruction du programme le commande. Voir Affichage
dinformations dtat, page 13-3.
Un contrle JdbNavToolBar est affich pour parcourir aisment les
donnes affiches dans la table.
Elle permet de trouver des donnes de manire interactive en utilisant
un contrle JdbNavField incorpor dans JdbNavToolBar. Pour davantage
dinformations sur la recherche de donnes, voir Recherche de
donnes, page 11-14.
Elle utilise un DBDisposeMonitor pour fermer automatiquement la
connexion la base de donnes lorsque le cadre est ferm.
Lapplication rsout les modifications apportes aux donnes du
QueryDataSet en utilisant le comportement par dfaut de rsolution.
Pour davantage dinformations, voir Explication de la rsolution par
dfaut, page 8-17. Le bouton Enregistrer de JdbNavToolBar effectue
lenregistrement. Les messages relatifs au processus de rsolution sont
affichs dans le contrle JdbStatusLabel.
Dans ce tutoriel, nous allons excuter les tches suivantes :
Crer un projet JBuilder
Gnrer une application
Ajouter des composants DataExpress pour accder aux donnes dune
base
Concevoir les colonnes de lapplication
Ajouter des composants dbSwing pour crer linterface utilisateur
Agrger des donnes avec des champs calculs
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-3
E t a p e 1 : C r a t i o n d u p r o j e t
Une fois ce tutoriel achev, lapplication doit avoir laspect suivant :
Figure 17.1 Application de base de donnes lmentaire
Vous pouvez consulter lapplication complte en ouvrant le fichier projet
exemple, BasicApp.jpx, qui se trouve dans <jbuilder>/samples/DataExpress/
BasicApp/. Il existe des diffrences mineures entre lapplication cre dans
ce tutoriel et lapplication exemple fournie. Les utilisateurs pour qui
laccs aux exemples de JBuilder est limit la lecture doivent copier le
rpertoire samples dans un rpertoire dont ils possdent les droits de
lecture et dcriture.
La section Tutoriels dans les Astuces JBuilder donne des informations sur
la visualisation et limpression des tutoriels. La section Options
daccessibilit des Astuces JBuilder contient des conseils permettant de
simplifier laccs aux fonctionnalits de JBuilder, destins en particulier
aux personnes ayant des difficults.
Pour plus dinformations sur les conventions de la documentation de ce
tutoriel et des autres documents JBuilder, voir Conventions de la
documentation, page 1-8.
Etape 1 : Cration du projet
Pour dvelopper votre application de base de donnes dans JBuilder, vous
devez dabord crer un nouveau projet. Pour ce faire,
1 Choisissez Fichier|Nouveau projet pour afficher lexpert projet.
17-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 2 : G n r a t i o n d u n e a p p l i c a t i o n
2 Tapez BasicApp dans le champ Nom.
3 Cliquez sur le bouton Terminer pour fermer lexpert et crer le projet.
Vous navez pas modifier les valeurs par dfaut des tapes 2 et 3 de
lexpert.
Le fichier projet BasicApp.jpx est ouvert dans le volet projet.
Etape 2 : Gnration dune application
Lexpert application cre les fichiers source .java qui seront ajouts au
projet que vous venez de crer.
Pour gnrer les fichiers source de votre application en utilisant lexpert
application, procdez comme suit :
1 Choisissez Fichier|Nouveau pour ouvrir la galerie dobjets.
2 Slectionnez longlet Gnral et double-cliquez sur licne Application
pour ouvrir lexpert application..
3 A ltape 1 de lexpert application, acceptez le nom de paquet par
dfaut, basicapp, tapez BasicApp dans le champ Nom de classe et cliquez
sur Suivant.
Remarque Le nom du paquet utilis dans ce tutoriel, basicapp, nest pas le mme
que celui qui est utilis par lapplication exemple,
com.borland.samples.dx.basicapp mais, hormis cela, les applications sont
les mmes.
4 A ltape 2 de lexpert application, tapez BasicAppFrame dans le champ
Classe, tapez Exemple dapplication de base de donnes lmentaire dans
le champ Titre et cliquez sur Terminer.
Les nouveaux fichiers source Java sont ajouts votre projet et affichs
en tant que nuds dans le volet projet. Le code source de
BasicAppFrame.java est ouvert dans le volet contenu.
5 Choisissez Fichier|Tout enregistrer pour enregistrer les fichiers source
et le fichier projet.
Etape 3 : Ajout de composants DataExpress votre application
Le concepteur dinterface utilisateur est utilis pour ajouter les
composants DataExpress BasicAppFrame.java. Vous ajouterez les
composants DataExpress suivants votre application :
Base de donnes
QueryDataSet
DBDisposeMonitor
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-5
E t a p e 3 : A j o u t d e c o m p o s a n t s D a t a E x p r e s s v o t r e a p p l i c a t i o n
Ces composants apportent la structure base de donnes sous-jacente
votre application.
1 Slectionnez longlet Conception pour BasicAppFrame.java dans le volet
Contenu afin dactiver le concepteur dinterface utilisateur.
La palette de composants apparat en haut du concepteur dinterface
utilisateur.
2 Cliquez sur le composant Database
dans la page DataExpress de la palette de composants, cliquez ensuite
nimporte o dans larborescence de composants ou dans le concepteur
dinterface utilisateur pour ajouter ce composant votre application.
Le nouveau composant Database, database1, saffiche sous le nud Accs
aux donnes dans le volet structure, et la ligne de code suivante est
ajoute la classe Frame :
Database database1 = new Database();
3 Slectionnez le composant database1 dans le volet structure,
slectionnez la proprit connection dans linspecteur et cliquez sur le
bouton Points de suspension (...) pour ouvrir la bote de dialogue
Connection.
4 Dfinissez les proprits de connexion pour la table employee du
JDataStore exemple, en utilisant la valeur des champs du tableau
suivant.
LURL de connexion pointe sur le fichier employee.jds dans un
sous-rpertoire dpendant du rpertoire o est install JBuilder,
<jbuilder>.
La bote de dialogue Connection contient un bouton Tester la
connexion. Cliquez sur ce bouton pour vrifier que les proprits de
connexion sont correctement dfinies. Le rsultat de la tentative de
connexion est affich dans la zone dtat. Quand la connexion russit,
cliquez sur OK. Si la connexion choue, vrifiez que vous avez bien
suivi toutes les tapes du Chapitre 4, Connexion une base
de donnes.
5 Ajoutez un composant QueryDataSet au concepteur en cliquant sur le
composant QueryDataSet de longlet DataExpress puis en cliquant dans
larborescence des composants ou dans linterface utilisateur.
Nom de la proprit Valeur
Pilote com.borland.datastore.jdbc.DataStoreDriver
URL Naviguez jusqu votre copie locale de <jbuilder>/
samples/JDataStore/datastores/employee.jds
Nom dutilisateur Entrez votre nom
Mot de passe non obligatoire
17-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 3 : A j o u t d e c o m p o s a n t s D a t a E x p r e s s v o t r e a p p l i c a t i o n
Dans linspecteur, slectionnez la proprit query du composant
QueryDataSet, cliquez sur les points de suspension pour ouvrir la bote
de dialogue Query et dfinissez les proprits de la manire suivante :
LInstruction SQL sera automatiquement excute sur la base de
donnes spcifie ds louverture du QueryDataSet.
6 Cliquez sur Tester la requte pour vrifier quelle peut tre excute.
La bote de dialogue Query doit ressembler ce qui suit pour que la
requte soit russie.
Figure 17.2 Bote de dialogue Query
Si la bote de dialogue Query indique Echec, recherchez des erreurs de
frappe ou des oublis dans les informations saisies pour la requte.
7 Cliquez sur OK pour fermer la bote de dialogue Query.
8 Ajoutez un composant DBDisposeMonitor de la page dbSwing
supplmentaires.
Le DBDisposeMonitor fermera le JDataStore lorsque la fentre sera ferme.
9 Dfinissez la proprit dataAwareComponentContainer du DBDisposeMonitor
par this.
10 Dveloppez le nud queryDataSet1 dans le volet structure.
Nom de la proprit Valeur
Base de donnes database1
Instruction SQL SELECT EMP_NO, FULL_NAME, HIRE_DATE, DEPT_NO,
JOB_COUNTRY, SALARY FROM EMPLOYEE
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-7
E t a p e 4 : C o n c e p t i o n d e s c o l o n n e s d e l a p p l i c a t i o n
Figure 17.3 Nud queryDataSet1 dvelopp
Les colonnes slectionnes dans la base de donnes JDataStore des
employs, employee.jds, sont affiches dans le nud queryDataSet1.
Les composants fondamentaux permettant dextraire et de stocker les
donnes issues de la base de donnes Employee sont en place. Nous allons
maintenant crer linterface utilisateur pour afficher et modifier ces
donnes.
Etape 4 : Conception des colonnes de lapplication
Avant dajouter une interface utilisateur lapplication, nous allons :
Ajouter des colonnes et modifier des proprits de colonnes
Spcifier des calculs dans des colonnes calcules
Ajout de colonnes et modification des proprits des
colonnes
1 Dveloppez le nud queryDataSet1 dans le volet structure et
double-cliquez sur <nouvelle colonne> pour ajouter une nouvelle
colonne.
Cela ouvre le concepteur de colonne dans le volet contenu et charge les
proprits de la nouvelle colonne dans linspecteur.
2 Dans linspecteur, changez la valeur de la proprit columnName de
NouvelleColonne1 en NEW_SALARY.
3 Cliquez sur le bouton Insrer une colonne pour ajouter quatre colonnes
supplmentaires dont les valeurs de la proprit columnName sont les
suivantes :
DIFF_SALARY
ORIG_TOTAL
NEW_TOTAL
DIFF_TOTAL
17-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 4 : C o n c e p t i o n d e s c o l o n n e s d e l a p p l i c a t i o n
4 Dfinissez les proprits de ces colonnes comme indiqu dans le
tableau suivant :
La modification des proprits dune colonne rend celle-ci persistante.
Quand une colonne devient persistante, des crochets ([ ]) sont placs
autour du nom de la colonne dans le volet structure.
Colonne Nom de la proprit Valeur
HIRE_DATE caption Date dembauche
HIRE_DATE displayMask MM-jj-aa
HIRE_DATE editMask MM-jj-aaaa
NEW_SALARY caption NEW_SALARY
NEW_SALARY calcType calculated
NEW_SALARY dataType BIGDECIMAL
NEW_SALARY visible FALSE
EMP_NO caption No employ
FULL_NAME caption Nom
FULL_NAME width 16
DEPT_NO caption Dpt.
JOB_COUNTRY caption Pays
JOB_COUNTRY width 15
SALARY caption Salaire
ORIG_TOTAL calcType aggregated
ORIG_TOTAL caption ORIG_TOTAL
ORIG_TOTAL dataType BIGDECIMAL
NEW_TOTAL calcType aggregated
NEW_TOTAL caption Nouveau total
NEW_TOTAL dataType BIGDECIMAL
DIFF_SALARY calcType calculated
DIFF_SALARY caption DIFF_SALARY
DIFF_SALARY dataType BIGDECIMAL
DIFF_TOTAL calcType aggregated
DIFF_TOTAL caption Total diff.
DIFF_TOTAL dataType BIGDECIMAL
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-9
E t a p e 4 : C o n c e p t i o n d e s c o l o n n e s d e l a p p l i c a t i o n
Lorsque vous aurez termin la modification des colonnes, le concepteur
de colonne doit ressembler ceci :
Figure 17.4 Colonnes de queryDataSet1 dans le concepteur de colonne
Spcification des calculs des colonnes calcules
Les colonnes NEW_SALARY et DIFF_SALARY sont des colonnes
calcules. Dans ce tutoriel, chaque employ obtient une augmentation de
10 %. Le calcul ajoute les donnes SALARY existantes au produit des
donnes SALARY existantes par 0,10. La valeur rsultante est place dans
la colonne NEW_SALARY. DIFF_SALARY est calcule en soustrayant la
valeur existante de SALARY de NEW_SALARY.
Pour ajouter le calcul,
1 Slectionnez le nud queryDataSet1 dans le volet structure, slectionnez
longlet Evnements de linspecteur et double-cliquez sur le
gestionnaire dvnement calcFields.
Cela cre le stub de la mthode de lvnement dans BasicAppFrame.java
et affiche son code source dans le volet contenu.
2 Ajoutez linstruction suivante aux instructions import existantes dans
BasicAppFrame.java pour importer la classe java.math.BigDecimal
ncessaire au type de donnes BIGDECIMAL choisi pour les colonnes
calcules.
import java.math.BigDecimal;
3 Modifiez la mthode dvnement afin de calculer les valeurs de
NEW_SALARY et de DIFF_SALARY, de la manire suivante :
void queryDataSet1_calcFields(ReadRow changedRow, DataRow calcRow, boolean
isPosted)
throws DataSetException {
BigDecimal bDin = changedRow.getBigDecimal("Salaire");
BigDecimal bDout = bDin.add(new BigDecimal(bDin.doubleValue()*10.0/100));
calcRow.setBigDecimal("NEW_SALARY", bDout);
calcRow.setBigDecimal("DIFF_SALARY", bDout.subtract(bDin));
}
17-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
Cette mthode est appele pour calcFields chaque fois quune valeur de
champ est enregistre et chaque fois quune ligne est valide. Cet
vnement reoit une donne reprsentant la valeur en cours dans la
ligne (changedRow) et renvoie une ligne pour y placer les modifications
que vous voulez apporter la ligne (calcRow) et un boolen (isPosted)
indiquant si la ligne est valide ou pas dans DataSet. Vous pouvez ne
pas recalculer les champs pour les lignes qui nont pas encore t
valides.
Certaines des colonnes ajoutes par cette tape sont des colonnes agrges
(ou statistiques). Nous nous occuperons de ces colonnes ultrieurement.
Ajoutons plutt une interface utilisateur de faon voir quoi ressemble
lapplication.
Etape 5 : Ajout de composants dbSwing pour crer linterface
utilisateur
Vous tes maintenant prt crer une interface utilisateur pour votre
application de base de donnes. Le moyen le plus rapide de le faire est
dutiliser les composants dbSwing dans le concepteur dinterface
utilisateur.
Remarque Lors de la dfinition dune interface utilisateur, la premire tape consiste
normalement choisir une disposition approprie lapplication
(comment seront visuellement arrangs les composants et quel
gestionnaire de disposition Java vous utiliserez pour contrler ces
positions.) Mais, apprendre utiliser les gestionnaires de disposition Java
est en soit une tche ardue. Donc, pour laisser ce tutoriel ax sur la
cration dune application de base de donnes, nous utiliserons la
disposition par dfaut (BorderLayout) et contrlerons la position des
composants en dfinissant leur proprit constraints.
Pour plus dinformations sur lutilisation des dispositions, voir
Introduction au concepteur et Utilisation des gestionnaires de
disposition dans Conception dapplications avec JBuilder.
Les tapes ci-aprs ajoutent lapplication les composants dinterface
utilisateur suivants partir de longlet dbSwing de la palette de
composants :
JdbTable (et conteneur), utilis pour afficher des donnes
bi-dimensionnelles dans un format de type feuille de calcul.
JdbNavToolBar, ensemble de boutons pour vous aider naviguer dans les
donnes affiches dans une JdbTable. Il vous permet de naviguer
rapidement dans lensemble de donnes lorsque lapplication est
excute.
JdbStatusLabel, qui affiche des informations sur lenregistrement ou
lopration en cours et les messages derreur.
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-11
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
Vous ajouterez ces composants contentPane (BorderLayout), qui est un
JPanel, et le conteneur principal de linterface utilisateur, dans lequel vous
allez disposer les composants visuels. Des composants JPanel
supplmentaires seront utiliss pour sparer les composants servant la
navigation du JdbStatusLabel.
Pour ajouter un composant JdbTable,
1 Slectionnez longlet Conception pour BasicAppFrame.java dans le volet
Contenu afin dactiver le concepteur dinterface utilisateur.
2 Slectionnez la page dbSwing de la palette de composants dans le
concepteur dinterface utilisateur.
3 Slectionnez un composant TableScrollPane de la page dbSwing de la
palette de composants, cliquez sur contentPane dans larborescence des
composants ou au centre de la surface du concepteur dinterface
utilisateur pour ajouter le composant votre application.
Le composant TableScrollPane, tableScrollPane1, apparat dans le volet
structure sous la forme dun nud de larborescence des composants.
4 Slectionnez un composant JdbTable de la page dbSwing de la palette de
composants, cliquez sur tableScrollPane1 dans larborescence des
composants ou au centre de la surface du concepteur dinterface
utilisateur pour ajouter le composant votre application.
Le composant JdbTable, jdbTable1, apparat dans le volet structure sous
la forme dun nud de larborescence des composants, sous
tableScrollPane1.
5 Donnez la valeur queryDataSet1 la proprit dataSet du jdbTable1.
Lorsque vous dfinissez la proprit dataSet du jdbTable1 par
queryDataSet1, les donnes de la base de donnes apparaissent dans le
concepteur dinterface utilisateur :
Figure 17.5 Composants JdbTable dans le concepteur dinterface utilisateur
17-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
Ensuite, nous ajouterons des composants de navigation, y compris un
JdbNavToolBar. Les composants JPanel permettent de sparer les
diffrents lments de linterface utilisateur.
Pour ajouter des lments de navigation,
1 Slectionnez la page Conteneurs Swing de la palette de composants
dans le concepteur dinterface utilisateur, slectionnez le composant
JPanel component
et cliquez sur le nud contentPane dans le volet structure.
2 Dfinissez la proprit layout de jPanel1 par FlowLayout.
3 Slectionnez la page dbSwing supplmentaires de la palette de
composants, slectionnez le composant JdbNavField et cliquez sur le
nud jPanel1 dans le volet structure.
Le composant JdbNavField offre une fonction de recherche incrmentale
pour les colonnes de type String. Sa proprit columnName spcifie la
colonne o seffectue la recherche. Si cette proprit nest pas dfinie, la
recherche est effectue sur la dernire colonne visite dans JdbTable.
4 Dfinissez la proprit preferredSize de jdbNavField1 par 125, 21.
5 Slectionnez la page dbSwing de la palette de composants, slectionnez
le composant JLabel
et cliquez sur le nud jPanel1 dans le volet structure.
6 Dfinissez la proprit text de jLabel1 par Chercher.
7 Slectionnez la page dbSwing de la palette de composants, slectionnez
le composant JdbNavToolBar et cliquez sur le nud jPanel1 dans le volet
structure.
Une instance de JdbNavToolBar, appele jdbNavToolBar1, est ajoute au
panneau et apparat dans larborescence des composants. Par dfaut, le
composant JdbNavToolBar dtecte automatiquement les autres
composants orients donnes du mme conteneur racine, et se dplace
dans lensemble de donnes du composant dtenant alors la
focalisation. Vous navez donc pas besoin de dfinir la proprit
constraints de jdbNavToolBar1 dans linspecteur.
Remarque Vous aurez peut-tre redimensionner lespace du concepteur pour
voir tous les composants de linterface utilisateur.
Vous voil prt ajouter le composant JdbStatusLabel.
Pour ajouter un composant JdbStatusLabel,
1 Ajoutez un autre composant JPanel au nud contentPane dans le volet
structure.
2 Dans linspecteur, dfinissez la proprit contraints de jPanel2 par
South.
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-13
E t a p e 5 : A j o u t d e c o m p o s a n t s d b S w i n g p o u r c r e r l i n t e r f a c e u t i l i s a t e u r
3 Slectionnez la page dbSwing de la palette de composants, slectionnez
le composant JdbStatusLabel
et cliquez sur la zone centrale proche du bord suprieur du panneau
dans le concepteur dinterface utilisateur.
Une instance de JdbStatusLabel, appele jdbStatusLabel1, est ajoute au
panneau et apparat dans larborescence des composants.
jdbStatusLabel1 sattache automatiquement au DataSet qui dtient la
focalisation.
4 Choisissez Excuter|Excuter le projet pour compiler et excuter
lapplication.
Lapplication en train de sexcuter ressemble ceci :
Figure 17.6 Application de base de donnes lmentaire avec barre de navigation et
libell dtat
Utilisez la barre de navigation et le champ de navigation pour vous
dplacer dans les enregistrements. Remarquez que la barre dtat
sactualise en consquence.
5 Fermez lapplication entrain de sexcuter et enregistrez toutes les
modifications (Fichier|Tout enregistrer).
Pour terminer lapplication, ajoutons des composants JdbTextField pour
afficher les donnes des colonnes statistiques (ou agrges).
17-14 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
E t a p e 6 : A g r g a t i o n d e d o n n e s a v e c d e s c h a m p s c a l c u l s
Etape 6 : Agrgation de donnes avec des champs calculs
Nous allons maintenant ajouter des composants JdbTextField pour afficher
les donnes des colonnes statistiques (ou agrges) : ORIG_TOTAL,
NEW_TOTAL et DIFF_TOTAL. Ces composants seront insrs dans un
composant JPanel distinct, lintrieur du composant JPanel qui contient
dj le composant JdbStatusLabel.
Pour ajouter les composants JdbTextField destins aux donnes des
colonnes agrges,
1 Slectionnez la page Conteneurs Swing de la palette de composants
dans le concepteur dinterface utilisateur, slectionnez le composant
JPanel et cliquez sur le nud jPanel2 dans le volet structure.
Cela ajoute un nouveau composant JPanel, jPanel3, dans jPanel2.
2 Dfinissez la proprit layout de jPanel3 par GridLayout, et la proprit
layout de jPanel2 par BorderLayout.
3 Slectionnez la page dbSwing de la palette de composants, slectionnez
le composant JdbTextField et cliquez sur le nud jPanel3 dans le volet
structure.
4 Dfinissez la proprit dataSet de jdbTextField1 par queryDataSet1, et sa
proprit columnName par ORIG_TOTAL.
5 Slectionnez la page Swing de la palette de composants, slectionnez le
composant JLabel et cliquez sur le nud jPanel3 dans le volet structure.
Si ncessaire, repositionnez le composant JLabel (jLabel2) dans le
concepteur dinterface utilisateur pour quil soit gauche du
composant jdbTextField1.
6 Dfinissez la proprit horizontalAlignment de jLabel2 par LEADING et la
proprit text par Total originel.
7 Ajoutez deux autres composants JdbTextField et JLabel, et dfinissez
leurs proprits comme indiqu dans le tableau suivant :
Composant Nom de la proprit Valeur
jdbTextField2 dataSet queryDataSet2
jdbTextField2 columnName NEW_TOTAL
jLabel3 horizontalAlignment CENTER
jLabel3 text Nouveau total
jdbTextField3 dataSet queryDataSet2
jdbTextField3 columnName DIFF_TOTAL
jLabel4 horizontalAlignment CENTER
jLabel4 text Diffrence
T u t o r i e l : C r a t i o n d u n e a p p l i c a t i o n d e b a s e d e d o n n e s l m e n t a i r e 17-15
E t a p e 6 : A g r g a t i o n d e d o n n e s a v e c d e s c h a m p s c a l c u l s
Si ncessaire, ajustez la position des composants dans le concepteur
dinterface utilisateur.
8 Dveloppez le nud queryDataSet2 dans le volet structure et
slectionnez la colonne ORIG_TOTAL.
9 Dans linspecteur, slectionnez la proprit agg, puis cliquez sur le
bouton points de suspension (...) pour ouvrir lditeur de la proprit
Agg.
Figure 17.7 Bote de dialogue Agg
10 Choisissez SALARY dans la liste droulante Colonne statistique,
choisissez SumAggOperator dans la liste droulante Opration
statistique et cliquez sur OK.
11 Slectionnez la colonne NEW_TOTAL dans le volet structure et ouvrez
la bote de dialogue Agg.
12 Choisissez NEW_SALARY dans la liste droulante Colonne statistique,
choisissez SumAggOperator dans la liste droulante Opration
statistique et cliquez sur OK.
13 Slectionnez la colonne DIFF_TOTAL dans le volet structure et ouvrez
la bote de dialogue Agg.
14 Choisissez DIFF_SALARY dans la liste droulante Colonne statistique,
choisissez SumAggOperator dans la liste droulante Opration
statistique et cliquez sur OK.
15 Choisissez Excuter|Excuter le projet pour compiler et excuter
lapplication.
Lapplication doit afficher les donnes agrges dans les nouveaux
composants JdbTextField.
17-16 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
I n d e x I-1
Symboles
.config, fichiers
cration pour les pilotes 4-10
? comme marqueur de paramtre JDBC 5-19
A
accs aux bases de donnes
distantes 15-3
locales 15-3
accs aux donnes 4-1, 5-1
partir dun module de donnes 10-1
depuis des sources de donnes
personnaliss 6-7
depuis les composants de linterface
utilisateur 13-2
sources de donnes JDBC 4-1
accs aux informations de modle 13-2
acquisition
dfinition 6-1
acquisition des donnes 5-1
partir de sources de donnes JDBC 6-1
avec des requtes paramtres 5-12
optimisation 5-10
actualisation des mtadonnes des colonnes
persistantes 7-9
administration des bases de donnes 15-8
tches 15-1
affichage
caractres spciaux 12-18
des donnes dans les composants orients
donnes 7-2
informations dtat 13-3
masques 12-18
agrgation de donne 12-1
agrgation de donnes
cration de colonnes agrges 12-11, 12-15
agrgation des donnes
personnalisation des mthodes
dagrgation 12-16
ajout de colonnes
des fichiers texte imports 3-2
aux requtes paramtres 5-19
pour objectifs internes 7-10
ajout de composants
aux modules de donnes 10-3
ajout de paramtres aux requtes 5-12
amlioration de lacquisition des donnes 5-10
analyse
chanes 12-18
analyse des donnes 12-16
API JDBC 2-1
appels de procdure
spcifiques au serveur 6-3
applications
base de donnes (2-niveaux) 10-10
gnration 10-20
applications client
dveloppement avec InterClient 4-7
applications de bases de donnes 2-1
cration 11-2
distribues 14-1
gnration 10-20
introduction 1-1, 2-1
applications deux-niveaux
gnration 10-20
applications distribues
base de donnes 14-1
applications exemple
DataSetData 14-2
ResolverEvents 8-19
applications multiniveaux
dploiement 14-5
Appliquer, bouton 10-15
architecture
DataExpress 2-1
B
Base de donnes, champ
dans QueryDescriptor 5-4
bases de donnes 2-5, 4-3
accs 15-3
affichage des informations 15-2
configuration des pilotes 15-3
connection, proprit 4-4
connexion 4-2, 4-3
connexion via JDBC 8-3
construction dapplications de bases de
donnes 1-1
dans les applications distribues 14-1
dveloppement 1-1
exemples 8-16
exploration 15-1
exploration des champs 15-1
index 15-1
interface utilisateur 11-1
interrogation 5-4
mise en pool des connexions 4-17
proprits (exemples) 12-1
UI 12-1
bases de donnes fichiers bi-dimensionnels 3-1
Index
I-2 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
bases de donnes distantes
connexion 4-2
bases de donnes exemple
StreamableDataSets 14-3
bases de donnes relationnelles 9-1
bibliothque de composants DataExpress 2-1
bibliothques
ajout un projet 10-6
cration 4-10
ncessaires 10-6
Borland
contacter 1-10
e-mail 1-12
groupes de discussion 1-11
rapports de bogues 1-12
ressources en ligne 1-10
support aux dveloppeurs 1-10
support technique 1-10
World Wide Web 1-10
bundles de ressources 5-7
C
calcul
colonnes 12-1
cots des marchandises 12-16
remises 12-16
taux de TVA 12-16
totaux 12-16
caractres spciaux 12-18
cascadeDeletes, option 9-9
cascadeUpdates, option 9-9
chanes
analyse 12-18
champs
liaison sur champs communs 9-2
obligatoires 12-25
champs communs 9-1
champs de donnes
exportation 16-1
champs heure
exportation 16-1
champs numriques
exportation 16-1
champs texte
exportation 16-1
chargement des don 6-9
codage des vnements
pour les modules de donnes 10-5
Coller la colonne, bouton 10-15
Coller le paramtre, bouton 10-15
colonnes 7-1, 7-8
ajout aux StorageDataSet 7-10
concepteur 7-2
contrle de leur ordre 7-11
dfinition des proprits 7-1, 7-2
dfinition des proprits persistantes 7-7
exploration 15-1
filtrage de donnes 11-1
liaison sur colonnes communes 9-2
localisation de donnes 11-1
manipulation 7-1
tri 11-1
valeurs de rfrence dans. Voir rfrence 12-2
visualisation des informations 7-2, 7-5
colonnes calcules 12-1, 12-8, 12-11
agrgation de donnes 12-11, 12-15
cration de listes de choix avec 12-2
cration de rfrences avec 12-2, 12-5
donnes agrges 12-12, 17-1
exemple 12-9
tutoriel 17-1
types supports 12-8
colonnes de rfrence 12-2
cration 12-2
exemple 12-5
colonnes persistantes
ajout 7-10
contrle de lactualisation des mtadonnes
avec 7-9
prsentation 7-8
suppression 7-9
Column, composant
dfinition des proprits 12-25
manipulation 12-25
persistant 12-25
prsentation 7-1
proprit locale 16-1
spcification comme persistant 7-8
stockage des objets Java dans 12-27
visualisation 12-25
vue densemble 2-8
composant DataSet
filtrage de donnes 11-1
localisation de donnes 11-1
tri de donnes 11-1
composants
JFC orients donnes 13-1
synchronisation 13-1
composants DataExpress
DataSetView 12-23
composants DataExpress pour EJB 2-9
composants de base de donnes XML 2-10
composants orients donnes 13-1
affichage des colonnes dans 12-25
affichage par dfaut des donnes 7-2
concepteur de colonne 12-25
activation 7-2
bouton gnrateur de RowIterator 7-3
options des mtadonnes 7-4, 7-5
I n d e x I-3
concepteurs
concepteur de colonne. Voir aussi concepteur
de colonne 7-2
connexion une base de donnes
tutoriel 17-1
connexions 4-1, 4-2
mise en pool des connexions JDBC 4-17
prsentation 4-1
problmes et solutions 4-22
connexions aux bases de donnes
monitoring 15-11, 15-13
connexions JDBC 4-1
gestion 2-5
manipulation du trafic 15-11
monitoring 15-11
prsentation 4-1
tutoriel 17-1
connexions SQL 4-1
Constructeur SQL 5-4
Continuer toutes les mtadonnes, option 7-4
contraintes
activation 11-12
contrle de la saisie de lutilisateur 12-18
contrles 13-1
conventions de la documentation 1-8
conventions des plates-formes 1-9
conversions de chanes
avec les masques 12-18
cots des marchandises
calcul 12-16
Cration dun ResourceBundle, bote de
dialogue 5-7
cration de requtes 5-2
cration des relations matre-dtail 9-1, 9-10
cration des tables SQL 15-8
curseurs
partags 13-1
D
Database, composant 4-1, 4-3
exemple 4-3
prsentation 4-1
utilisation 4-3
vue densemble 2-5
DataExpress
applications 2-1
architecture 1-1, 2-1, 2-2
composants 2-2, 2-5, 5-1
description 2-1
DataExpress, composants
accs aux donnes avec 5-1
DataModule, interface
description 10-1
personnalisation 10-3
rfrencement 10-8
vue densemble 2-9
DataRow, composant
localisation 11-18
localisation des donnes 11-17
ordre des colonnes dans les recherches 11-20
vue densemble 2-8
DataSet, composant
enregistrement des modifications 8-1
flux 8-13
fonctionnalit 2-2
stockage des objets Java 12-27
vue densemble 2-6
DataSet, paquet 2-5
DataSetData, 14-1
DataSetData, composant 8-13
application exemple, description 14-2
extractDataSet, mthode 8-14, 8-15
extractDataSetChanges, mthode 8-15
remplissage 8-15
transmission des mtadonnes 14-5
DataSetException, classe 13-5
DataSetView, composant
proprits 12-23
tri dans 11-9
utilisation 12-1, 12-23
vue densemble 2-7
DataStore, composant
vue densemble 2-6
DataStoreDriver, composant
vue densemble 2-7
dates
importation 3-2
dbSwing, composants
cration dune interface utilisateur de base de
donnes 2-10
utilisation 13-1
deleteProcedure, p 8-6
demande
nom dutilisateur et mot de passe 4-16
dploiement
applications multiniveaux 14-5
Direction de tri de la colonne slectionne,
options 10-16
distants
serveurs 4-1
distribution des objets
base de donnes 14-1
donnes 5-1
accs 11-2
acquisition 5-1, 6-9
activation des contraintes 11-12
autre vue 12-23
cache 2-13
chargement 6-9
dition 15-6
I-4 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
exemples de modles 12-19
exploration 15-10
exportation 3-3
extraction 5-1, 6-7, 11-2
extraction dune source de donnes 5-1
filtrage 11-1
filtres 11-5
fournisseurs 5-1
fourniture 6-9
insertion 15-10
localisation 11-1, 11-14, 11-15, 11-17
manipulation 11-1
modification 15-10
obligatoires 12-25
persistance 12-25
persistantes 2-13
recherche 11-14
rsolution 8-1, 8-3
personnalisation 8-20
rsolution avec des procdures stockes 8-6
rsolution des donnes
comportement par dfaut 8-17
stockage 2-13
tri 11-1
visualisation 15-6
donnes agrges
exemple 12-12, 17-1
donnes boolennes
modles 12-22
donnes dheure
modles 12-21
donnes de chanes
modles 12-21
donnes de date
modles 12-21
donnes membre non transient 8-15
donnes membre private 8-15
donnes numriques 3-2
importation 3-2
modles 12-19
donnes rcapitules 12-11, 12-12, 17-1
donnes regroupes 12-11
Donnes, page
Pilote de base de donnes 15-6
E
diteur de la proprit agg 12-15
diteur de la proprit sort 11-11
dition des donnes
contrle de la saisie de lutilisateur 12-18
matre-dtail 9-9
dition/affichage masques 12-1
enableDelete, proprit 12-23
enableInsert, proprit 12-23
enableUpdate, proprit 12-23
enregistrement des 8-3
enregistrement des donnes 8-1
exemple 8-6
ProcedureResolver 8-8
tables multiples 8-10
utilisation de QueryResolver 8-6
enregistrement des modifications 8-6, 8-16
dans les QueryDataSet 8-4
relations matre-dtail 9-12
enregistrement dtail
lecture 9-8
lecture des donnes 9-8
enregistrements dtail
lecture 9-7
ensembles de donnes
amlioration des performances 5-10
en lecture seule
lecture seule
ensembles de donnes 5-12
fermeture 5-12
flux 8-13
liaison 9-1
liaison des valeurs des paramtres 5-21
ouverture 6-9
ouverture explicite 5-12
erreurs
gestion des exceptions. Voir aussi
exceptions 13-5
vnements
ajout de la logique mtier 10-5
rsolveur 8-16
exceptions
traitement 13-5
Excuter la requte, commande 10-17
exemple CalculatedColumn 12-9
exemples
agrgations calcules 12-12
agrgations de donnes avec des colonnes
calcules 12-12
ajout dinformation dtat 13-3
base de donnes 8-16
bases de donnes 12-23
colonnes calcules 12-9
cration de listes de choix 12-2
cration de rfrences 12-5
filtrage des donnes 11-6
procdures stockes
codage 8-6
relations matre-dtail 9-3
requtes paramtres 5-13
rsolution de la modification des donnes 8-3
ResolverEvents 8-19
visualisation des informations sur les
colonnes 7-2
I n d e x I-5
exemples base de donnes
agrgations calcules 12-12
autres vues des donnes 12-23
colonnes calcules 12-9
cration de listes de choix 12-2
visualisation des informations sur les
colonnes 7-2
exemples de base de donnes
relations matre-dtail 9-3
exemples de bases de donnes
configuration de JDataStore 4-4, 4-7
cration de rfrences 12-5
filtrage des donnes 11-6
requtes paramtres 5-13
rsolution des modifications 8-3
rsolution des ProcedureDataSet 8-6
ResolverEvents 8-19
StreamableDataSets 14-3
Expert Utilisation dun module de donnes, bote
de dialogue
description 10-8
Explorateur JDataStore 2-14
exportation de donnes
dans des fichiers texte 3-1
utilisation de modles 16-1
exportation des donnes 3-3
partir dun QueryDataSet 3-4
exportDisplayMask, proprit 12-19
exemple 16-1
extractDataSet, mthode 8-15
extractDataSetChanges, mthode 8-15
extraction de donnes
partir dun module de donnes 10-1
extraction des 8-16
extraction des donnes 5-1, 6-7, 11-2
enregistrements dtail 5-22
via des procdures stockes 6-1
F
fermeture
ensembles de donnes 5-12
fetchAsNeeded, proprit 9-7
fichiers .config
cration pour les pilotes 4-10
fichiers ASCII. Voir aussi fichiers texte 3-1
fichiers SCHEMA
et exportDisplayMasks 12-19
fichiers texte 3-1
exportation 3-1, 3-3
importation 2-15, 3-1
vers des sources JDBC 3-5
vers des tables SQL 3-5
fichiers texte format 3-2
importation 3-2
FilterRows, exemple 11-6
filtrage de donnes 11-1
filtrage des donnes 11-5
exemple 11-6
filtres de donnes
exemple 11-6
flux densembles de donnes 8-13
utilisation 8-14
fontes
Conventions de la documentation JBuilder 1-8
formatage des donnes 12-16
masques daffichage 12-18
formatter, proprit
utilisation 12-27
fournisseurs
cration de personnaliss 6-7
de donnes 5-1
fournisseurs de donnes 5-1
fourniture des donnes 5-1
partir de sources de donnes JDBC 6-1
pour les exemples de bases de donnes 11-2
G
gnration
applications de bases de donnes 10-20
gestion
exceptions 13-5
gestionnaire de pilotes 4-1
gestionnaires dvnements
agrgation personnalise 12-16
Group By, clause 10-14
Group By, page
Modeleur de donnes 10-14
groupes de discussion
Borland 1-11
public 1-11
groupes de discussion Usenet 1-11
groupes de donnes 12-11
I
implmentations de serveurs au niveau
intermdiaire 8-13
importation de donnes
partir de fichiers texte 3-1
importation des donnes 2-15
importation et exportation de donnes
tutoriel 16-1
index
base de donnes 15-1
uniques et nomms 11-12
index uniques 11-12
informations dtat 13-3
insertion
8-8
insertProcedure, proprit 8-6
I-6 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
insertRow(), mthode 6-9
installation
InterClient 4-7
instruction SQL
discussion 6-3
Instruction SQL, champ
dans QueryDescriptor 5-4
instructions SQL
dfinition 5-4
encapsulation 6-1
excution 15-4
InterBase 4-7
astuces 4-8
configuration pour JBuilder 4-7
exemple de procdures stockes 6-5
paramtres de retour des procdures
stockes 8-10
InterBase et InterClient
utilisation avec JBuilder 4-8
InterClient 4-7
configuration pour JBuilder 4-7, 4-10
erreurs de connexion 4-22
installation 4-7
utilisation de pilotes JDBC 4-13
interfaces Java
dveloppement avec InterClient 4-7
INTERNALROW 8-13
Internet
dveloppement dapplications client/
serveur 4-7
InternetBeans Express 2-10
Intranet
dveloppement dapplications client/
serveur 4-7
J
Java
objets contenant des DataSet 8-13
pilotes de base de donnes 4-7
RMI avec des bases de donnes 14-1
JBCL, composants
orients donnes 13-1
JConnectionPool
optimisation des performances 4-19
JDataStore
cration 2-15
oprations 2-15
paquet 2-5
pilotes JDBC 4-4, 4-7
quand lutiliser 2-13
utilisation 2-13
vrification 2-15
JDBC 1-1, 8-3
ajout de pilotes 4-10
connexions 4-1
mise en pool des connexions 4-17
squences dchappement 6-3
tutoriel 17-1
JDBC API 4-1
JdbNavField, composant 11-15
exemple 11-14
JdbStatusLabel, composant 13-3
exemple 13-3
JdbTable, composant
tri dans 11-10
JFC, composants 13-1
jointure entre tables 9-1
L
lecture des donnes 4-1, 5-1, 5-2
enregistrement dtail 9-8
enregistrements dtail 5-22, 9-7
optimisation 5-10
liaison des valeurs des paramtres 5-21
liaison entre ensembles de donnes 9-1
Liaison entre requtes, bote de dialogue 10-18
liaisons des tables
remarques 8-11
types 8-11
libells dtat
ajout aux applications 13-3
listes de choix 12-2
exemple 12-2
suppression 12-4
Local InterBase Server 4-8
locale
proprit 16-1
localisation de donnes 11-1
localisation des donnes 11-14
interactive 11-15
localisation 11-18
options locate 11-18
ordre des colonnes 11-20
par programme 11-17
variants 11-20
locate, mthode 11-17
LocateOptions, classe 11-18
logique mtier 10-1, 10-5
M
matre-dtail, relations 10-18
manipulation du trafic JDBC 15-11
marqueurs de lemplacement dun paramtre 5-19
masques 12-1
pour dition 12-18
pour formats de donnes 12-18
pour importer/exporter 12-19
masques daffichage 12-1, 12-18
ajout 12-16
I n d e x I-7
masques ddition 12-1
masques dexportation 12-16, 12-19
masques dimportation 12-16, 12-19
masques de saisie
ajout 12-16
proprit editMask 12-18
masterDataSet, proprit 9-10
MasterDetail, exemple 9-3
masterLink, proprit 9-2
MasterLinkDescriptor, classe
utilisation 9-2
metaDataUpdate, proprit
avec des tables multiples 8-13
mtadonnes 7-1
configuration en tant que dynamiques 7-5
dcouverte 7-1
exploration 15-1
obtention 6-8
persistance 5-11, 7-4
visualisation 7-5
mthodes StorageDataSet
insertRow() 6-9
startLoading() 6-9
mise jour
s 8-1
modle numriques
exemples 12-19
modles 12-1, 12-16
accs aux informations les concernant 13-2
donnes boolennes 12-22
donnes dheure 12-21
donnes de chanes 12-21
donnes de date 12-21
donnes numriques 12-19
exemples 12-19
exportation de donnes 16-1
pour saisie des donnes 12-18
modles boolens 12-16
modles de chanes 12-16
exemples 12-19
modles de date et dheure 12-16
exemples 12-19
modles de donnes 12-16
modles de donnes boolennes
exemples 12-19
modles numriques 12-16
Modeleur de donnes
applications 2-niveaux 10-10
applications client-serveur 10-10
cration des requtes 15-2
Module de donnes, expert 10-2
modules de donnes 10-1
ajout aux bibliothques 10-6
ajout de composants 10-3
ajout de la logique mtier 10-5
compilation 10-5
cration 10-2, 10-10
enregistrement 10-5
experts 10-2, 10-8
fichiers classe 10-5
rfrencement 10-5, 10-8
utilisation 10-5, 10-8
utilisation des modules gnrs 10-22
Moniteur JDBC 15-11
dans les applications 15-13
moniteur JDBC
dmarrage 15-11
utilisation 15-13
MonitorButton
ajout la palette 15-13
proprits 15-14
utilisation 15-14
monitoring
connexions 15-11, 15-13
pilotes JDBC 15-11
mot de passe
demande 4-16
N
navigation
ensembles de donnes multiples 13-1
synchronisation des composants 13-1
nom dutilisateur
demande 4-16
nomms
index 11-12
paramtres 5-19
O
objets
contenant des DataSet 8-13
Java 12-27
stockage 12-27
objets AggDescriptor 12-15
optimisation de lacquisition des donnes 5-10
Options de chargement, champ
dans QueryDescriptor 5-4
Oracle PL/SQL
exemple de procdures stockes 6-5
Order By, clause
ajout 10-16
Order By, page 10-16
ordre de rsolution
spcification 8-13
ordre de tri 11-12
SQL, requtes 10-16
unique 11-12
ordre de tri croissant 10-16
ordre de tri dcroissant 10-16
I-8 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
ordre des colonnes
localisation des donnes 11-20
ouverture
ensembles de donnes 5-12
P
paquets
consacrs aux bases de donnes 2-5
paquets consacrs aux 2-5
ParameterRow 5-14
ParameterRow, composant 5-19
vue densemble 2-8
paramtres
requtes 10-17
paramtres
spcification 5-6
paramtres de retour 8-10
Paramtres, page
QueryDescriptor 5-6
partage des curseurs 13-1
PARTIAL, option
recherches multicolonnes 11-20
performance
amlioration apportes aux ensembles de
donnes 5-10
persistance
donnes 2-13
persistance des colonnes 12-25
annulation 7-9
persistance des donnes 12-25
personnalisation de la rsolution 8-18
personnalisation des fournisseurs 6-7
personnalise 8-22
Pilote de base de donnes 7-5
configuration 15-3
Donnes, page 15-6, 15-10
fentre 15-2
Saisie SQL, page 15-4
utilisation 15-1
visualisation des informations des colonnes 7-5
pilotes
ajout des pilotes de bases de donnes un
projet 4-11
configuration pour les bases de donnes 15-3
pilotes de base de donnes
entirement Java 4-7
pilotes de bases de donnes
ajout JBuilder 4-10
ajout un projet 4-11
pilotes JDBC 4-2
ajout JBuilder 4-10
ajout au projet 4-11
configuration 4-7
InterClient 4-13
JDataStore 4-4, 4-7
quand les utiliser 2-13
spcifis dans le composant Database 4-4
plusieurs--plusieurs
relations entre les donnes 8-11
plusieurs--un
relations entre les donnes 8-11
ProcedureDataSet, composant 2-1
propos 6-1
enregistrement des modifications dans 8-8
exemple de rsolution 8-6
rsolution des donnes 8-6
tri dans 11-9
vue densemble 2-7
ProcedureResolver
proprits 8-6
ProcedureResolver, c 8-6
ProcedureResolver, composant
codage 8-6
enregistrement des modifications avec 8-8
procdures stockes
cration 6-3
exemple 6-5, 6-6, 8-6
InterBase 8-10
paramtres de retour 8-10
prsentation 6-1
ProcedureResolver 8-8
processus de rsolution
contrle 8-18
projet par dfaut
ajout des pilotes de bases de donnes 4-11
projets
ajout des pilotes de bases de donnes 4-11
proprit query, diteur
tutoriel 17-1
proprits de connexion
base de donnes 4-4
proprits des colonnes
affichage des donnes 7-2
pour les requtes multitables 8-13
provideData, mthode 6-9
ProviderHelp
initData, mthode 6-9
Q
query, proprit
comprhension 5-4
diteur 5-4
paramtres 5-6
QueryDataSet, composant 2-1, 2-7, 5-15
dfinition de la proprit query 5-4
enregistrement des modifications 8-4
exemple 5-13, 8-3
exportation dans un fichier 3-3, 3-4
prsentation 5-2, 5-10
tri dans 11-9
I n d e x I-9
QueryDescriptor, composant
dfinition visuelle des proprits 5-4
Paramtres, page 5-6
Placer le texte SQL dans lensemble de
ressources, option 5-7
Requte, page 5-4
QueryProvider, composant
pour les requtes multitables 8-13
QueryResolver, composant
ajout 8-17
avec des procdures stockes 8-6
dfaut 8-17
enregistrement des modifications avec 8-6
vnements
contrle 8-18
interception des vnements 8-18
personnalisation 8-16, 8-17, 8-18
R
rcapitulation de donnes 12-11, 12-12, 17-1
recherches multicolonnes
ordre des colonnes 11-20
rconciliation des donnes 8-1
rcupration des donnes
partir de sources de donnes JDBC 3-3
enregistrement dtail 9-8
enregistrements dtail 5-22
regroupement de donnes 12-11
regroupement des ressources 5-7
relations entre les donnes
1--1 8-11
1--plusieurs 8-11
plusieurs--1 8-11
plusieurs--plusieurs 8-11
relations matre-dtail 10-18
cration 9-1, 9-10
dfinition 9-2
exemple 9-3
requtes 5-22
rsolution 8-22, 9-12
relations un--plusieurs 9-1
remises
calcul 12-16
remplissage des tables SQL 15-10
renvoie de paramtres 8-10
Requte, page 5-4
requtes 5-2
composants ncessaires 5-2
construction 5-4
contenant une clause WHERE 8-11
cration 15-2
cration avec le modeleur de donnes 10-10
cration de requtes paramtres 5-12
dition directe 10-17
enregistrement dans des modules de donnes
Java 10-19
enregistrement dans un module de
donnes 10-19
excution 15-4
Group By, clause 10-14
matre-dtail 10-18
multiples dans le modeleur de donnes 10-17
ordre de tri 10-16
paramtres 10-15
prsentation 5-2
proprits des colonnes de plusieurs tables 8-13
sassurer quelles sont modifiables 5-12
SQL
Pilote de base de donnes 15-4
sur plusieurs tables 8-11
test 10-17
visualisation des rsultats 10-17
Where, clause 10-15
requtes paramtres 5-12, 10-15, 10-17
ajout de colonnes 5-19
exemple 5-13
fourniture de nouvelles valeurs 5-21
liaison des valeurs 5-21
pour les enregistrements matre-dtail 5-22
requtes SQL 5-2
ajout de paramtres 5-12
composants ncessaires 5-2
optimisation 7-6
prsentation 5-2
ressourable 5-7
rsolution
exemple 8-6
ProcedureResolver 8-8
rsolution des donnes 8-1, 8-3, 8-16, 8-20
dfaut 8-17
personnalisation de la logique du
rsolveur 8-17
personnalisation des vnements 8-18
procdures stockes 8-6
QueryDataSet 8-4
relations matre-dtail 9-12
tables multiples 8-10
rsolution multitable
ordre de rsolution 8-13
ResolutionManager, classe 8-16
resolveOrder, proprit 8-10, 8-13
ResolverEvents, application exemple 8-19
rsolveurs
dfaut 8-17
vnements 8-16
personnalisation 8-17, 8-20
Retarder la lecture des dtails jusqu ce que cela
soit ncessaire 9-7
I-10 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s
RMI
avec des bases de donnes 14-1
RowFilterListener, interface
exemple 11-6
rowID, proprit
utilisation 8-13
RowIterator, classe 7-3
S
saisie de donnes
modles 12-1
saisie de lutilisateur
analyse 12-18
contrle 12-18
Saisie SQL, page
Pilote de base de donnes 15-4
saveChanges(), mthode
et proprit rowID 8-13
SCHEMA, fichiers 3-2, 12-19
schemaName, proprit 8-10
squences dchappement 6-3
srialisation des objets 8-13
serveur InterBase local 4-8
serveurs de bases de donnes
communication avec 2-1
serveurs SQL
connexion aux. Voir connexions SQL 4-1
setResolver, proprit 8-17
SimpleStoredProcedure, exemple 8-6
sources de donnes
accs 5-1
connexion 4-2
sources de donnes JDBC 3-3, 5-1, 6-1
partir de fichiers texte 3-5
accs 4-1, 5-1
enregistrement des donnes dun fichier
texte 3-5
spcification de lordre de rsolution 8-13
SQL
composants ncessaires aux requtes 5-2
connexions 4-1
optimisation des requtes 7-6
sassurer que les requtes sont modifiables 5-12
SQL, bases de donnes
connexion 4-2
SQL, instructions 15-4
SQL, requtes
dition directe 10-17
enregistrement dans des modules de donnes
Java 10-19
enregistrement dans un module de
donnes 10-19
Group By, clause 10-14
matre-dtail 10-18
multiples dans le modeleur de donnes 10-17
ordre de tri 10-16
test 10-17
visualisation des rsultats 10-17
Where, clause 10-15
SQL, tables 15-8, 15-10, 15-11
SqlRes, classe 5-7
SQLResolver
utilisation avec des tables multiples 8-10
SQLResolver, composant 8-16
personnalisation 8-17
StatusEvent, auditeur 13-5
StorageDataSet, composant
ajout de colonnes vides 7-10
contrle de lordre des colonnes 7-11
enregistrement des modifications 8-1
prsentation de lutilisation 5-1
vue densemble 2-6
storageDataSet, proprit 12-23
StreamableDataSets, exemple
excution 14-3
suppression
colonnes persistantes 7-9
suppression des tables 15-11
Sybase
exemple de procdures stockes 6-6
synchronisation des composants 13-1
synonymes
affichage des donnes dans 15-6
T
tableColumnName, proprit 8-10
TableDataSet, composant
enregistrement des modifications 3-3
exportation de donnes formates 16-1
prsentation de lutilisation 3-1
rsolution 3-5
tri dans 11-9
vue densemble 2-7
tableName, proprit 8-10
tables
cration 15-8
exploration 15-1
interrogation 11-2
lies 8-11
modification des donnes 15-6, 15-10
non modifiable 8-13
remplissage 15-10
suppression 15-11
visualisation des donnes 15-6, 15-10
tables de donnes
affichage des colonnes de liaison du dtail 9-9
tables dtail 9-2
dition 9-9
tables matre 9-2
dition 9-9
I n d e x I-11
tables multiples
rsolution 8-10
tables SQL
partir de fichiers texte 3-5
cration 15-8
enregistrement des donnes dun fichier
texte 3-5
remplissage 15-10
suppression 15-11
taux de TVA
calcul 12-16
test
requtes 10-17
TestFrame.java, exemple 6-7
TextDataFile, composant
prsentation de lutilisation 3-1
rcupration des donnes JDBC pour 3-3
rsolution 3-5
totaux
calcul 12-16
traitement des erreurs 13-5
transactions 8-3
traitement par dfaut 8-1
tri de donnes 11-1
tri des donnes 11-9
avec des relations matre-dtail 9-2
avec les outils de conception 11-11
dans les tables 11-10
ordre de tri 11-12
par programme 11-14
tutoriels
agrgations calcules 17-1
agrgations de donnes avec des colonnes
calcules 17-1
application de base de donnes 17-1
connexions JDBC 17-1
importation et exportation des donnes dun
fichier texte 16-1
tutoriels de bases de donnes
agrgations calcules 17-1
connexions JDBC 17-1
types de donnes
variant 12-27
U
un--plusieurs 9-1
relations entre les donnes 8-11
un--un
relations entre les donnes 8-11
updateProcedure, proprit 8-6
URL
ajout dans le modeleur de donnes 10-11
ouverture dans le modeleur de donnes 10-11
V
ValidationException 13-5
Variant, classe
localisation des donnes 11-20
variant, types de donnes 12-27
Variant.OBJECT, types de donnes
dans les colonnes 12-27
VariantFormatter, classe 12-16
vues
affichage des donnes dans 15-6
de donnes 2-7
W
Where, clause 10-15
Where, page
Modeleur de donnes 10-15
I-12 D v e l o p p e m e n t d a p p l i c a t i o n s d e b a s e s d e d o n n e s

Vous aimerez peut-être aussi