Vous êtes sur la page 1sur 284

Dveloppement dapplications de bases de donnes

Borland VERSION 9

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

Table des matires


Chapitre 1 Chapitre 3

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

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 2

Les applications de bases de donnes JBuilder


Architecture des applications de bases de donnes . . . . . . . . . . . . . . Composants DataExpress . . . . . . . . . . . . Principales fonctionnalits et avantages . . Prsentation des composants DataExpress Composants DataExpress pour EJB . . . . . . InternetBeans Express . . . . . . . . . . . . . . Composants de bases de donnes XML . . . . dbSwing. . . . . . . . . . . . . . . . . . . . . . Modules de donnes et modeleur de donnes Pilote de base de donnes . . . . . . . . . . . . Moniteur JDBC . . . . . . . . . . . . . . . . . . JDataStore et JBuilder . . . . . . . . . . . . . . Utilisation dun JDataStore ou dun pilote JDBC . . . . . . . . . . . . Avantages supplmentaires apports par JDataStore. . . . . . . . . . . . . . . . Utilisation de lexplorateur JDataStore. . . Oprations avec lexplorateur JDataStore . . . . . . . . . . . . . . . . InterBase et JBuilder . . . . . . . . . . . . . . .

Chapitre 4

2-1
. 2-1 . 2-2 . 2-3 . 2-5 . 2-9 . 2-10 . 2-10 . 2-10 . 2-12 . 2-12 . 2-12 . 2-13 . 2-13 . 2-14 . 2-14 . 2-15 . 2-16

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 i

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

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

Chapitre 6

Utilisation des procdures stockes


Procdures stockes : trucs & astuces . . . . . . Squences dchappement, instructions SQL et appels de procdure spcifiques au serveur . . . . . . . . . . . . . . . . . . . Utilisation des procdures stockes spcifiques un fournisseur . . . . . . . . . . . . . . . . . Utilisation avec JDataStore de procdures stockes et de fonctions dfinies par lutilisateur . . . . . . . . . . . . . . . . Utilisation de procdures stockes InterBase

6-1
6-3

6-3 6-4

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

6-4 6-5

ii

Chapitre 8

Chapitre 9

Enregistrement des modifications dans la source de donnes

8-1

Etablissement dune relation matre-dtail

9-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

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

iii

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


Accs aux donnes des exemples . . . . . . . Filtrage des donnes . . . . . . . . . . . . . . . Ajout et suppression de filtres . . . . . . . Tri des donnes. . . . . . . . . . . . . . . . . . Tri des donnes dans un composant JdbTable . . . . . . . . . . . . . . . . . . . Tri des donnes en utilisant les outils de conception visuelle de JBuilder . . . . Tri et indexation. . . . . . . . . . . . . . Codage du tri . . . . . . . . . . . . . . . . . Recherche de donnes . . . . . . . . . . . . . . Recherche de donnes avec le composant JdbNavField . . . . . . . . . . . . . . . . . Recherche de donnes par programme . . Recherche de donnes au moyen dun DataRow. . . . . . . . . . . . . . . . Utilisation des options de recherche . . . . Recherches grant tous les types de donnes . . . . . . . . . . . . . . . . . Lordre des colonnes dans le DataRow et le DataSet . . . . . . . . . . . . . . . . .

11-1
. 11-2 . 11-5 . 11-6 . 11-9 11-10 11-11 11-12 11-14 11-14 11-15 11-17 11-18 11-18 11-20 11-20

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

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

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 iv

Chapitre 15

Chapitre 16

Administration dune base de donnes

15-1

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

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 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

Chapitre

Chapitre1

Introduction

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/.

Introduction

1-1

Rsum des chapitres

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.

1-2

Dveloppement dapplications de bases de donnes

Rsum des chapitres

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.
Introduction

1-3

Tutoriels sur les bases de donnes

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.

1-4

Dveloppement dapplications de bases de donnes

Exemples de bases de donnes

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.

Introduction

1-5

Documentation annexe

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.
1-6
Dveloppement dapplications de bases de donnes

Documentation annexe

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
Introduction

1-7

Conventions de la documentation

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 Police
Police espacement fixe

Polices et symboles Signification


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 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. Litalique est utilis pour les termes nouveaux, les titres des manuels et, parfois, pour la mise en valeur. 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.

Gras

Italiques Touches []

1-8

Dveloppement dapplications de bases de donnes

Conventions de la documentation

Tableau 1.1 Police


<>

Polices et symboles (suite) Signification


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. 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.

Italiques, serif

...

JBuilder est disponible sur plusieurs plates-formes. Reportez-vous au tableau suivant pour une description des conventions associes aux diverses plates-formes.
Tableau 1.2 Elment
Chemins

Conventions des plates-formes Signification


Les chemins daccs mentionns dans la documentation sont indiqus par une barre oblique (/). Pour Windows, utilisez une barre oblique inverse (\). 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> Les captures dcran refltent lapparence Metal sur diverses plates-formes.

Rpertoire de base

Captures dcran

Introduction

1-9

Support et ressources destins aux dveloppeurs

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 Bulletins lectroniques http://www.borland.fr/ http://www.borland.com/techpubs/jbuilder/ Pour vous abonner aux bulletins lectroniques, utilisez le formulaire en ligne : http://www.borland.fr/products/newsletters/ index.html

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.

1-10

Dveloppement dapplications de bases de donnes

Support et ressources destins aux dveloppeurs

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 :
Remarque

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

Ces groupes de discussion sont maintenus par les utilisateurs et ne sont pas des sites Borland officiels.

Introduction

1-11

Support et ressources destins aux dveloppeurs

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.

1-12

Dveloppement dapplications de bases de donnes

Chapitre

Chapitre2

Les 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.
Les applications de bases de donnes JBuilder

2-1

Composants DataExpress

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.)

2-2

Dveloppement dapplications de bases de donnes

Composants DataExpress

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.

Les applications de bases de donnes JBuilder

2-3

Composants DataExpress

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
2-4
Dveloppement dapplications de bases de donnes

Composants DataExpress

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
Database

Description
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.

Proprits couramment utilises


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.

Les applications de bases de donnes JBuilder

2-5

Composants DataExpress

Composant/ Classe
DataSet

Description
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.

Proprits couramment utilises


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. 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.

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. 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.

DataStore

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.

2-6

Dveloppement dapplications de bases de donnes

Composants DataExpress

Composant/ Classe
DataStoreDriver

Description
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. 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. 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. 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. 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.

Proprits couramment utilises

QueryDataSet

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

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

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

La proprit storageDataSet indique le composant contenant les donnes dont le DataSetView prsente une vue.

Les applications de bases de donnes JBuilder

2-7

Composants DataExpress

Composant/ Classe
Colonne

Description
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.

Proprits couramment utilises


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. 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.

ParameterRow

2-8

Dveloppement dapplications de bases de donnes

Composants DataExpress pour EJB

Composant/ Classe
DataModule

Description
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.

Proprits couramment utilises

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.

Les applications de bases de donnes JBuilder

2-9

InternetBeans Express

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.

2-10

Dveloppement dapplications de bases de donnes

dbSwing

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.

Les applications de bases de donnes JBuilder

2-11

Modules de donnes et modeleur de donnes

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.

2-12

Dveloppement dapplications de bases de donnes

JDataStore et JBuilder

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

Les applications de bases de donnes JBuilder

2-13

JDataStore et JBuilder

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

2-14

Dveloppement dapplications de bases de donnes

JDataStore et JBuilder

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.

Les applications de bases de donnes JBuilder

2-15

InterBase et JBuilder

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.

2-16

Dveloppement dapplications de bases de donnes

Chapitre

Importation et exportation des donnes dun fichier texte


Chapitre3

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

Importation et exportation des donnes dun fichier texte

3-1

Ajout de colonnes un TableDataSet en utilisant lditeur

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.

3-2

Dveloppement dapplications de bases de donnes

Rcupration de donnes dune source JDBC

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,

Importation et exportation des donnes dun fichier texte

3-3

Exportation des donnes

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.

3-4

Dveloppement dapplications de bases de donnes

Exportation des donnes

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.

Importation et exportation des donnes dun fichier texte

3-5

3-6

Dveloppement dapplications de bases de donnes

Chapitre

Chapitre4

Connexion 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-1

Connexion une base de donnes

Connexion aux bases de donnes

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.

4-2

Dveloppement dapplications de bases de donnes

Connexion aux bases de donnes

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();

Connexion une base de donnes

4-3

Connexion aux bases de donnes

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.

4-4

Dveloppement dapplications de bases de donnes

Connexion aux bases de donnes

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
Pilote

Description
Le nom de la classe du pilote JDBC correspondant lURL ; pour cet exemple, slectionnez dans la liste com.borland.datastore.jdbc.DataStoreDriver. 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 :

URL

jdbc:borland:dslocal:/usr/local/<jbuilder>/samples/ JDataStore/ datastores/employee.jds


Windows :

jdbc:borland:dslocal:C:\jbuilder\samples\JDataStore\ datastores\ employee.jds


Nom dutilisateur Mot de passe Demander le mot de passe Le nom dutilisateur autoris accder au serveur de bases de donnes. Pour les tutoriels exemple, nimporte quel nom fonctionne. Le mot de passe de lutilisateur autoris. Pour les tutoriels, aucun mot de passe nest requis. Prcise sil faut demander lutilisateur un mot de passe louverture de la connexion la base de donnes.

Connexion une base de donnes

4-5

Connexion aux bases de donnes

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.

4-6

Dveloppement dapplications de bases de donnes

Configuration de JDataStore

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

Connexion une base de donnes

4-7

Configuration dInterBase et InterClient

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.

4-8

Dveloppement dapplications de bases de donnes

Configuration dInterBase et InterClient

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.

Connexion une base de donnes

4-9

Ajout dun pilote JDBC JBuilder

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.

4-10

Dveloppement dapplications de bases de donnes

Ajout dun pilote JDBC JBuilder

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.

Connexion une base de donnes

4-11

Ajout dun pilote JDBC JBuilder

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.

4-12

Dveloppement dapplications de bases de donnes

Connexion une base de donnes en utilisant des pilotes JDBC InterClient

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

Connexion une base de donnes

4-13

Connexion une base de donnes en utilisant des pilotes JDBC InterClient

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
Pilote URL

Valeur
interbase.interclient.Driver 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 SYSDBA masterkey

Nom dutilisateur Mot de passe

4-14

Dveloppement dapplications de bases de donnes

Utilisation du composant Database dans votre application

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

Connexion une base de donnes

4-15

Sollicitation dun nom dutilisateur et dun mot de passe

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

4-16

Dveloppement dapplications de bases de donnes

Mise en pool des connexions JDBC

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

Connexion une base de donnes

4-17

Mise en pool des connexions JDBC

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.

4-18

Dveloppement dapplications de bases de donnes

Mise en pool des connexions JDBC

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>(...)

Connexion une base de donnes

4-19

Mise en pool des connexions JDBC

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();

4-20

Dveloppement dapplications de bases de donnes

Mise en pool des connexions JDBC

} 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 {

Connexion une base de donnes

4-21

En cas de problme lors des connexions de JDataStore et dInterBase

// 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.

4-22

Dveloppement dapplications de bases de donnes

Chapitre

Extraction des donnes dune source de donnes


Chapitre5

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.
Extraction des donnes dune source de donnes

5-1

Interrogation dune base de donnes

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.

5-2

Dveloppement dapplications de bases de donnes

Interrogation dune base de donnes

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.
Proprit
database query paramtres executeOnOpen

Effet
Spcifie sur quel objet de connexion Database appliquer la requte. Une instruction SQL, gnralement une instruction SELECT. Un ReadWriteRow optionnel utilis pour renseigner les paramtres, sutilise avec les requtes paramtres. 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. 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.

loadOption

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.

Extraction des donnes dune source de donnes

5-3

Interrogation dune base de donnes

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

5-4

Dveloppement dapplications de bases de donnes

Interrogation dune base de donnes

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.

Extraction des donnes dune source de donnes

5-5

Interrogation dune base de donnes

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.

5-6

Dveloppement dapplications de bases de donnes

Interrogation dune base de donnes

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.

Extraction des donnes dune source de donnes

5-7

Interrogation dune base de donnes

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 ?

5-8

Dveloppement dapplications de bases de donnes

Interrogation dune base de donnes

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
Extraction des donnes dune source de donnes

5-9

Interrogation dune base de donnes

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
5-10
Dveloppement dapplications de bases de donnes

Interrogation dune base de donnes

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.

Extraction des donnes dune source de donnes

5-11

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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

5-12

Dveloppement dapplications de bases de donnes

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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.

Extraction des donnes dune source de donnes

5-13

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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 :


Nom de la proprit
Pilote URL

Valeur
com.borland.datastore.jdbc.DataStoreD river Naviguez jusqu <jbuilder>/samples/ JDataStore/datastores/employee.jds dans le champ URL local. Entrez votre nom non obligatoire

Nom dutilisateur Mot de passe

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.

5-14

Dveloppement dapplications de bases de donnes

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

3 Slectionnez <nouvelle colonne> et dfinissez dans linspecteur les proprits suivantes pour la nouvelle colonne :
Nom de la proprit
columnName dataType default

Valeur
low_no INT 15

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 :
Nom de la proprit
columnName dataType default

Valeur
high_no INT 50

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 :
Nom de la proprit
Base de donnes Instruction SQL

Valeur
database1 select emp_no, first_name, last_name from employee where emp_no >= :low_no and emp_no <= :high_no

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.

Extraction des donnes dune source de donnes

5-15

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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.

5-16

Dveloppement dapplications de bases de donnes

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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.

Extraction des donnes dune source de donnes

5-17

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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

5-18

Dveloppement dapplications de bases de donnes

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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

Extraction des donnes dune source de donnes

5-19

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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

5-20

Dveloppement dapplications de bases de donnes

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

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

Extraction des donnes dune source de donnes

5-21

Utilisation de requtes paramtres pour obtenir des donnes dune base de donnes

Dans cet exemple, la valeur du paramtre :searchname peut tre dfinie par un composant de linterface utilisateur. Pour ce faire, votre code doit :

1 2 3 4

Obtenir la valeur du composant chaque fois quelle change. La placer dans une colonne dun objet ParameterRow. Fournir cet objet au QueryDataSet. 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.

5-22

Dveloppement dapplications de bases de donnes

Chapitre

Utilisation des procdures stockes


Chapitre6

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.

Utilisation des procdures stockes

6-1

Utilisation des procdures stockes

Les proprits suivantes de lobjet ProcedureDescriptor affectent lexcution des procdures stockes :
Proprit
database procedure

But
Spcifie lobjet de connexion Database sur lequel excuter la procdure. 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. Un ReadWriteRow optionnel utilis pour remplir les paramtres. Ces valeurs peuvent provenir de tout DataSet ou ReadWriteRow. 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. 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.

paramtres executeOnOpen

loadOption

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

6-2

Dveloppement dapplications de bases de donnes

Procdures stockes : trucs & astuces

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.

Utilisation des procdures stockes

6-3

Utilisation des procdures stockes spcifiques un fournisseur

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.

6-4

Dveloppement dapplications de bases de donnes

Utilisation des procdures stockes spcifiques un fournisseur

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.

Utilisation des procdures stockes

6-5

Utilisation des procdures stockes spcifiques un fournisseur

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.

6-6

Dveloppement dapplications de bases de donnes

Ecriture dun fournisseur de donnes personnalis

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.

Utilisation des procdures stockes

6-7

Ecriture dun fournisseur de donnes personnalis

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

6-8

Dveloppement dapplications de bases de donnes

Ecriture dun fournisseur de donnes personnalis

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().

Utilisation des procdures stockes

6-9

Ecriture dun fournisseur de donnes personnalis

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 :
Valeur
0 -1 n

Description
fournit seulement les mtadonnes fournit toutes les donnes fournit un maximum de n lignes

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.

6-10

Dveloppement dapplications de bases de donnes

Chapitre

Chapitre7

Manipulation 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
Manipulation des colonnes

7-1

Prsentation des proprits et mtadonnes de colonne

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.

7-2

Dveloppement dapplications de bases de donnes

Prsentation des proprits et mtadonnes de colonne

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

Manipulation des colonnes

7-3

Prsentation des proprits et mtadonnes de colonne

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 :
Tableau 7.1 Option
Etendre RowIterator

Bote de dialogue Cration dun RowIterator Description


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. 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. Gnre les mthodes dlgues pour appeler les mthodes de lien du RowIterator imbriqu. Gnre les mthodes dlgues pour appeler les mthodes de navigation du RowIterator imbriqu.

Retirer les souligns ; mettre en majuscules la lettre suivante

Gnrer les mthodes de lien Gnrer les mthodes de navigation

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.

7-4

Dveloppement dapplications de bases de donnes

Prsentation des proprits et mtadonnes de colonne

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. 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.

Remarque

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.

Manipulation des colonnes

7-5

Optimisation dune requte

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.

7-6

Dveloppement dapplications de bases de donnes

Optimisation dune requte

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.

Manipulation des colonnes

7-7

Optimisation dune requte

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

7-8

Dveloppement dapplications de bases de donnes

Optimisation dune requte

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 ;
Manipulation des colonnes

7-9

Optimisation dune requte

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>.


7-10
Dveloppement dapplications de bases de donnes

Optimisation dune requte

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.

Manipulation des colonnes

7-11

7-12

Dveloppement dapplications de bases de donnes

Chapitre

Enregistrement des modifications dans la source de donnes


Chapitre8

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

Enregistrement des modifications dans la source de donnes

8-1

Enregistrement des modifications dans la source de donnes

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.

8-2

Dveloppement dapplications de bases de donnes

Enregistrement des modifications dun QueryDataSet

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.

Enregistrement des modifications dans la source de donnes

8-3

Enregistrement des modifications dun QueryDataSet

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().
8-4
Dveloppement dapplications de bases de donnes

Enregistrement des modifications dun QueryDataSet

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.

Enregistrement des modifications dans la source de donnes

8-5

Enregistrement des modifications dans la source de donnes par une procdure

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.
8-6
Dveloppement dapplications de bases de donnes

Codage de procdures stockes pour grer la rsolution de donnes

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.

Enregistrement des modifications dans la source de donnes

8-7

Codage de procdures stockes pour grer la rsolution de donnes

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

8-8

Dveloppement dapplications de bases de donnes

Codage de procdures stockes pour grer la rsolution de donnes

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.
Enregistrement des modifications dans la source de donnes

8-9

Rsolution des donnes de plusieurs tables

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

8-10

Dveloppement dapplications de bases de donnes

Rsolution des donnes de plusieurs tables

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.

Enregistrement des modifications dans la source de donnes

8-11

Rsolution des donnes de plusieurs tables

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.

8-12

Dveloppement dapplications de bases de donnes

Utilisation des ensembles de donnes avec RMI (mise en flux)

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

Enregistrement des modifications dans la source de donnes

8-13

Utilisation des ensembles de donnes avec RMI (mise en flux)

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.

8-14

Dveloppement dapplications de bases de donnes

Utilisation des ensembles de donnes avec RMI (mise en flux)

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-15

Enregistrement des modifications dans la source de donnes

Personnalisation de la logique de rsolution par dfaut

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.

8-16

Dveloppement dapplications de bases de donnes

Personnalisation de la logique de rsolution par dfaut

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

Enregistrement des modifications dans la source de donnes

8-17

Personnalisation de la logique de rsolution par dfaut

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.

8-18

Dveloppement dapplications de bases de donnes

Personnalisation de la logique de rsolution par dfaut

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,

Enregistrement des modifications dans la source de donnes

8-19

Personnalisation de la logique de rsolution par dfaut

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);

8-20

Dveloppement dapplications de bases de donnes

Personnalisation de la logique de rsolution par dfaut

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.

Enregistrement des modifications dans la source de donnes

8-21

Personnalisation de la logique de rsolution par dfaut

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.

8-22

Dveloppement dapplications de bases de donnes

Chapitre

Chapitre9

Etablissement 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
Etablissement dune relation matre-dtail

9-1

Dfinition dune relation matre-dtail

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,
9-2
Dveloppement dapplications de bases de donnes

Dfinition dune relation matre-dtail

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

Etablissement dune relation matre-dtail

9-3

Dfinition dune relation matre-dtail

JDataStore comme dcrit dans Configuration de JDataStore, page 4-7 :


Nom de la proprit
Pilote URL Nom dutilisateur Mot de passe

Valeur
com.borland.datastore.jdbc.DataStoreDriver Naviguez jusqu votre copie locale de <jbuilder>/samples/ JDataStore/datastores/employee.jds Entrez votre nom non obligatoire

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 :
Nom de la proprit
Base de donnes Instruction SQL

Valeur
database1 SELECT * FROM COUNTRY

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
Base de donnes Instruction SQL

Valeur
database1 SELECT * FROM EMPLOYEE

9-4

Dveloppement dapplications de bases de donnes

Dfinition dune relation matre-dtail

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.

Etablissement dune relation matre-dtail

9-5

Dfinition dune relation matre-dtail

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.

9-6

Dveloppement dapplications de bases de donnes

Lecture des dtails

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).
Etablissement dune relation matre-dtail

9-7

Lecture des dtails

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
9-8
Dveloppement dapplications de bases de donnes

Modification des donnes dans les ensembles de donnes matre-dtail

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
Etablissement dune relation matre-dtail

9-9

Etapes de la cration dune relation matre-dtail

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 :
9-10

Dveloppement dapplications de bases de donnes

Etapes de la cration dune relation matre-dtail

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.

Etablissement dune relation matre-dtail

9-11

Enregistrement des modifications dans une relation matre-dtail

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.

9-12

Dveloppement dapplications de bases de donnes

Enregistrement des modifications dans une relation matre-dtail

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.

Etablissement dune relation matre-dtail

9-13

9-14

Dveloppement dapplications de bases de donnes

10
Utilisation des modules de donnes pour simplifier laccs aux donnes
Chapitre10

Chapitre

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-1

Cration dun module de donnes en utilisant les outils de conception

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.

10-2

Dveloppement dapplications de bases de donnes

Cration dun module de donnes en utilisant les outils de conception

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-3

Cration dun module de donnes en utilisant les outils de conception

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;

10-4

Dveloppement dapplications de bases de donnes

Cration dun module de donnes en utilisant les outils de conception

} 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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-5

Cration dun module de donnes en utilisant les outils de conception

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.

10-6

Dveloppement dapplications de bases de donnes

Cration dun module de donnes en utilisant les outils de conception

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

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-7

Cration dun module de donnes en utilisant les outils de conception

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

10-8

Dveloppement dapplications de bases de donnes

Cration dun module de donnes en utilisant les outils de conception

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-9

Cration de modules de donnes en utilisant le modeleur de donnes

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.

10-10

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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-11

Utilisation des modules de donnes pour simplifier laccs aux donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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.

10-12

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-13

Cration de modules de donnes en utilisant le modeleur de donnes

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.

10-14

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-15

Cration de modules de donnes en utilisant le modeleur de donnes

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.

10-16

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-17

Cration de modules de donnes en utilisant le modeleur de donnes

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
10-18
Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-19

Cration de modules de donnes en utilisant le modeleur de donnes

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.

10-20

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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.

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-21

Cration de modules de donnes en utilisant le modeleur de donnes

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

10-22

Dveloppement dapplications de bases de donnes

Cration de modules de donnes en utilisant le modeleur de donnes

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

Utilisation des modules de donnes pour simplifier laccs aux donnes

10-23

Cration de modules de donnes en utilisant le modeleur de donnes

public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { } new Application1(); } }

10-24

Dveloppement dapplications de bases de donnes

11
Chapitre11

Chapitre

Filtrage, 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.
Filtrage, tri et recherche de donnes

11-1

Accs aux donnes des exemples

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.
11-2
Dveloppement dapplications de bases de donnes

Accs aux donnes des exemples

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.
Nom de la proprit
Pilote URL Nom dutilisateur Mot de passe

Valeur
com.borland.datastore.jdbc.DataStoreDriver Naviguez jusqu votre copie locale de <jbuilder>/ samples/JDataStore/datastores/employee.jds Entrez votre nom non obligatoire

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
Base de donnes Instruction SQL

Valeur
database1 SELECT * FROM EMPLOYEE

Filtrage, tri et recherche de donnes

11-3

Accs aux donnes des exemples

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.

11-4

Dveloppement dapplications de bases de donnes

Filtrage des donnes

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

Filtrage, tri et recherche de donnes

11-5

Filtrage des donnes

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

11-6

Dveloppement dapplications de bases de donnes

Filtrage des donnes

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

Filtrage, tri et recherche de donnes

11-7

Filtrage des donnes

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();

11-8

Dveloppement dapplications de bases de donnes

Tri des donnes

// 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.

Filtrage, tri et recherche de donnes

11-9

Tri des donnes

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.
11-10
Dveloppement dapplications de bases de donnes

Tri des donnes

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.

Filtrage, tri et recherche de donnes

11-11

Tri des donnes

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

11-12

Dveloppement dapplications de bases de donnes

Tri des donnes

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

Filtrage, tri et recherche de donnes

11-13

Recherche de donnes

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.

11-14

Dveloppement dapplications de bases de donnes

Recherche de donnes

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.

Filtrage, tri et recherche de donnes

11-15

Recherche de donnes

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

11-16

Dveloppement dapplications de bases de donnes

Recherche de donnes

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.

Filtrage, tri et recherche de donnes

11-17

Recherche de donnes

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
11-18

Dveloppement dapplications de bases de donnes

Recherche de donnes

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

Filtrage, tri et recherche de donnes

11-19

Recherche de donnes

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.

11-20

Dveloppement dapplications de bases de donnes

12
Ajout de fonctionnalits aux applications de bases de donnes
Chapitre12

Chapitre

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

Ajout de fonctionnalits aux applications de bases de donnes

12-1

Cration de rfrences

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.

12-2

Dveloppement dapplications de bases de donnes

Cration de rfrences

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 :
Option
Base de donnes Instruction SQL

Valeur
database1 select COUNTRY from COUNTRY

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.
12-3

Ajout de fonctionnalits aux applications de bases de donnes

Cration de rfrences

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 :
Nom de la proprit
Ensemble de donnes Picklist/Lookup queryDataSet2 Type de donnes Afficher dans la liste de slection queryDataSet2

Valeur
queryDataSet2 COUNTRY STRING coche JOB_COUNTRY

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.

12-4

Dveloppement dapplications de bases de donnes

Cration de rfrences

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

Ajout de fonctionnalits aux applications de bases de donnes

12-5

Cration de rfrences

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 :
Pour cette option
Base de donnes Instruction SQL

Choisissez
database1 select * from EMPLOYEE_PROJECT

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 :
Nom de la proprit
calcType caption columnName dataType

Valeur
CALC EMPLOYEE_NAME EMPLOYEE_NAME STRING

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
12-6

Dveloppement dapplications de bases de donnes

Cration de rfrences

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-7

Utilisation de colonnes calcules

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)

12-8

Dveloppement dapplications de bases de donnes

Utilisation de colonnes calcules

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-9

Utilisation de colonnes calcules

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 :
Nom de la proprit
calcType caption columnName dataType currency

Valeur
CALC NEW_SALARY NEW_SALARY BIGDECIMAL true

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;

12-10

Dveloppement dapplications de bases de donnes

Utilisation de colonnes calcules

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
Ajout de fonctionnalits aux applications de bases de donnes

12-11

Utilisation de colonnes calcules

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
caption columnName currency dataType calcType visible

Valeur
GROUP_TOTAL GROUP_TOTAL True BIGDECIMAL aggregated Oui

12-12

Dveloppement dapplications de bases de donnes

Utilisation de colonnes calcules

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-13

Utilisation de colonnes calcules

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.

12-14

Dveloppement dapplications de bases de donnes

Utilisation de colonnes calcules

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

Ajout de fonctionnalits aux applications de bases de donnes

12-15

Ajout de modles daffichage ou de modification pour formater les donnes

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
12-16
Dveloppement dapplications de bases de donnes

Ajout de modles daffichage ou de modification pour formater les donnes

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 2 3 4

les modles de nombre ; les modles de date et dheure ; les modles de chane ; 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

Ajout de fonctionnalits aux applications de bases de donnes

12-17

Ajout de modles daffichage ou de modification pour formater les donnes

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 (_).

12-18

Dveloppement dapplications de bases de donnes

Ajout de modles daffichage ou de modification pour formater les donnes

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-19

Ajout de modles daffichage ou de modification pour formater les donnes

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
85

Valeur formate
85%

Signification
Tous les chiffres sont optionnels, les zros de dbut ne sont pas affichs, la valeur est divise par 100 et saffiche comme un pourcentage. 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. 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.

# ##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

$#,###.##;($#,###.##)

4321.1 -123.456

$4,321.1 ($123.46)

12-20

Dveloppement dapplications de bases de donnes

Ajout de modles daffichage ou de modification pour formater les donnes

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 :
Spcification de modle
jj MMM aaaaG j/MM/aa H:m

Valeur
14 janvier 1900 2 fvrier 1492 4 juillet 1776 3:30am 2 mars 1997 11:59pm

Valeur formate
14 Jan 1900AD 02 Fv 1492AD 07/4/76 3:30 03/2/92 23:59

Signification
Renvoie deux chiffres pour le jour, labrviation du mois, un espace (littral) et 4 chiffres pour lanne. 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.

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-21

Ajout de modles daffichage ou de modification pour formater les donnes

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 :


Spcification de modle
00000{-9999}

Valeur
950677394 00043 1540001

Valeur formate
95067-7394 00043 00154-0001

Signification
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. 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. 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.

L0L 0L0

H2A2R9 M1M3W4

H2A 2R9 M1M 3W4

{(999)} 000-0000^!;0

4084311000

(408) 431-1000

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;");

12-22

Dveloppement dapplications de bases de donnes

Prsentation de plusieurs vues des donnes

Le tableau suivant donne des modles boolens et le rsultat de leur formatage :


Spcification de modle
homme;femme V,F,V Oui,Non,Ne sait pas fumeur;; fumeur;non fumeur;

Format des valeurs true


homme V Oui fumeur fumeur

Format des valeurs false


femme F Non (chane vide) non fumeur

Format des valeurs null


(chane vide) V Ne sait pas (chane vide) (chane vide)

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-23

Prsentation de plusieurs vues des donnes

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.

12-24

Dveloppement dapplications de bases de donnes

Garantie de la persistance des donnes

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-25

Garantie de la persistance des donnes

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.

12-26

Dveloppement dapplications de bases de donnes

Utilisation de types de donnes variant

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.

Ajout de fonctionnalits aux applications de bases de donnes

12-27

Utilisation de types de donnes variant

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.

12-28

Dveloppement dapplications de bases de donnes

13
Chapitre13

Chapitre

Utilisation 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
Utilisation dautres contrles et vnements

13-1

Accs aux donnes et aux informations de modle depuis un composant dinterface

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.

13-2

Dveloppement dapplications de bases de donnes

Affichage dinformations dtat

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.

Utilisation dautres contrles et vnements

13-3

Affichage dinformations dtat

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

13-4

Dveloppement dapplications de bases de donnes

Gestion des erreurs et des exceptions

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

Utilisation dautres contrles et vnements

13-5

Gestion des erreurs et des exceptions

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.

13-6

Dveloppement dapplications de bases de donnes

14
Cration dune application de base de donnes distribue laide de DataSetData
Chapitre14

Chapitre

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.

Cration dune application de base de donnes distribue laide de DataSetData

14-1

Explication de lexemple dapplication de base de donnes distribue

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

14-2

Dveloppement dapplications de bases de donnes

Explication de lexemple dapplication de base de donnes distribue

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.

Cration dune application de base de donnes distribue laide de DataSetData

14-3

Explication de lexemple dapplication de base de donnes distribue

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

14-4

Dveloppement dapplications de bases de donnes

Explication de lexemple dapplication de base de donnes distribue

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

Cration dune application de base de donnes distribue laide de DataSetData

14-5

Explication de lexemple dapplication de base de donnes distribue

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.

14-6

Dveloppement dapplications de bases de donnes

15
Chapitre15

Chapitre

Administration 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
Chapter 15

Exploration des tables et mtadonnes des bases 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.

Administration dune base de donnes

15-1

Exploration des tables et mtadonnes des bases de donnes

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.

15-2

Dveloppement dapplications de bases de donnes

Exploration des tables et mtadonnes des bases de donnes

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.

Administration dune base de donnes

15-3

Exploration des tables et mtadonnes des bases de donnes

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
15-4
Dveloppement dapplications de bases de donnes

Exploration des tables et mtadonnes des bases de donnes

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.

Administration dune base de donnes

15-5

Exploration des tables et mtadonnes des bases de donnes

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.

15-6

Dveloppement dapplications de bases de donnes

Exploration des tables et mtadonnes des bases de donnes

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.

Administration dune base de donnes

15-7

Utilisation du pilote de base de donnes pour ladministration de bases de donnes

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.
15-8
Dveloppement dapplications de bases de donnes

Utilisation du pilote de base de donnes pour ladministration de bases de donnes

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.

Administration dune base de donnes

15-9

Utilisation du pilote de base de donnes pour ladministration de bases de donnes

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.

15-10

Dveloppement dapplications de bases de donnes

Surveillance des connexions aux bases de donnes

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 :

Administration dune base de donnes

15-11

Surveillance des connexions aux bases de donnes

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.

15-12

Dveloppement dapplications de bases de donnes

Surveillance des connexions aux bases de donnes

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.

Administration dune base de donnes

15-13

Surveillance des connexions aux bases de donnes

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
outputEnabled maxLogSize

Effet
Active ou dsactive la surveillance du pilote. Taille maximum de lhistorique de suivi. La valeur par dfaut est de 8 Ko.

15-14

Dveloppement dapplications de bases de donnes

16
Tutoriel : Importation et exportation des donnes dun fichier texte
Chapitre16

Chapitre

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

Tutoriel : Importation et exportation des donnes dun fichier texte

16-1

Etape 1 : Cration du projet

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.

16-2

Dveloppement dapplications de bases de donnes

Etape 2 : Cration du fichier texte

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.

Tutoriel : Importation et exportation des donnes dun fichier texte

16-3

Etape 4 : Ajout de composants DataExpress votre application

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.
Nom de la proprit
delimiter separator fileName

Valeur
" (guillemet) , (virgule) <chemin_fichier_donnes_texte> (le chemin daccs ImportTest.txt, y compris le nom du fichier)

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.

16-4

Dveloppement dapplications de bases de donnes

Etape 4 : Ajout de composants DataExpress votre application

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 :
Nom de la proprit
dataType caption columnName

Valeur
SHORT my_number my_number

c Slectionnez nouveau <nouvelle colonne> et dfinissez dans linspecteur les proprits suivantes pour la seconde colonne :
Nom de la proprit
dataType caption columnName

Valeur
STRING my_string my_string

7 Choisissez Fichier|Tout enregistrer pour enregistrer les fichiers source et le fichier projet.
Tutoriel : Importation et exportation des donnes dun fichier texte

16-5

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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.

16-6

Dveloppement dapplications de bases de donnes

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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.


Tutoriel : Importation et exportation des donnes dun fichier texte

16-7

Etape 6 : Ajout dun composant Swing JButton

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
16-8
Dveloppement dapplications de bases de donnes

Etape 6 : Ajout dun composant Swing JButton

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); }

Tutoriel : Importation et exportation des donnes dun fichier texte

16-9

Etape 7 : Compilation et excution de votre application

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.

16-10

Dveloppement dapplications de bases de donnes

Etape 7 : Compilation et excution de votre application

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.

Tutoriel : Importation et exportation des donnes dun fichier texte

16-11

Etape 8 : Utilisation de modle pour lexportation de champs numriques, date/heure

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.

16-12

Dveloppement dapplications de bases de donnes

Etape 8 : Utilisation de modle pour lexportation de champs numriques, date/heure

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.

Tutoriel : Importation et exportation des donnes dun fichier texte

16-13

Etape 8 : Utilisation de modle pour lexportation de champs numriques, date/heure

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.

16-14

Dveloppement dapplications de bases de donnes

17
Tutoriel : Cration dune application de base de donnes lmentaire
Chapitre17

Chapitre

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

Tutoriel : Cration dune application de base de donnes lmentaire

17-1

Tutoriel : Cration dune application de base de donnes lmentaire

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

17-2

Dveloppement dapplications de bases de donnes

Etape 1 : Cration du projet

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.

Tutoriel : Cration dune application de base de donnes lmentaire

17-3

Etape 2 : Gnration dune application

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

17-4

Dveloppement dapplications de bases de donnes

Etape 3 : Ajout de composants DataExpress votre application

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>.
Nom de la proprit
Pilote URL Nom dutilisateur Mot de passe

Valeur
com.borland.datastore.jdbc.DataStoreDriver Naviguez jusqu votre copie locale de <jbuilder>/ samples/JDataStore/datastores/employee.jds Entrez votre nom non obligatoire

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.
Tutoriel : Cration dune application de base de donnes lmentaire

17-5

Etape 3 : Ajout de composants DataExpress votre application

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 :
Nom de la proprit
Base de donnes Instruction SQL

Valeur
database1 SELECT EMP_NO, FULL_NAME, HIRE_DATE, DEPT_NO, JOB_COUNTRY, SALARY FROM EMPLOYEE

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.

17-6

Dveloppement dapplications de bases de donnes

Etape 4 : Conception des colonnes de lapplication

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-7

Tutoriel : Cration dune application de base de donnes lmentaire

Etape 4 : Conception des colonnes de lapplication

4 Dfinissez les proprits de ces colonnes comme indiqu dans le tableau suivant :
Colonne
HIRE_DATE HIRE_DATE HIRE_DATE NEW_SALARY NEW_SALARY NEW_SALARY NEW_SALARY EMP_NO FULL_NAME FULL_NAME DEPT_NO JOB_COUNTRY JOB_COUNTRY SALARY ORIG_TOTAL ORIG_TOTAL ORIG_TOTAL NEW_TOTAL NEW_TOTAL NEW_TOTAL DIFF_SALARY DIFF_SALARY DIFF_SALARY DIFF_TOTAL DIFF_TOTAL DIFF_TOTAL

Nom de la proprit
caption displayMask editMask caption calcType dataType visible caption caption width caption caption width caption calcType caption dataType calcType caption dataType calcType caption dataType calcType caption dataType

Valeur
Date dembauche MM-jj-aa MM-jj-aaaa NEW_SALARY calculated BIGDECIMAL FALSE No employ Nom 16 Dpt. Pays 15 Salaire aggregated ORIG_TOTAL BIGDECIMAL aggregated Nouveau total BIGDECIMAL calculated DIFF_SALARY BIGDECIMAL aggregated Total diff. BIGDECIMAL

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.

17-8

Dveloppement dapplications de bases de donnes

Etape 4 : Conception des colonnes de lapplication

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)); }

Tutoriel : Cration dune application de base de donnes lmentaire

17-9

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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.

17-10

Dveloppement dapplications de bases de donnes

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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

Tutoriel : Cration dune application de base de donnes lmentaire

17-11

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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.

17-12

Dveloppement dapplications de bases de donnes

Etape 5 : Ajout de composants dbSwing pour crer linterface utilisateur

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).

Tutoriel : Cration dune application de base de donnes lmentaire

17-13

Etape 6 : Agrgation de donnes avec des champs calculs

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
jdbTextField2 jdbTextField2 jLabel3 jLabel3 jdbTextField3 jdbTextField3 jLabel4 jLabel4

Nom de la proprit
dataSet columnName horizontalAlignment text dataSet columnName horizontalAlignment text

Valeur
queryDataSet2 NEW_TOTAL CENTER Nouveau total queryDataSet2 DIFF_TOTAL CENTER Diffrence

17-14

Dveloppement dapplications de bases de donnes

Etape 6 : Agrgation de donnes avec des champs calculs

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.

Tutoriel : Cration dune application de base de donnes lmentaire

17-15

17-16

Dveloppement dapplications de bases de donnes

Index
Symboles
.config, fichiers cration pour les pilotes 4-10 ? comme marqueur de paramtre JDBC 5-19 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

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

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-1

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 I-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

Dveloppement dapplications de bases de donnes

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-3

Index

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 I-4

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

Dveloppement dapplications de bases de donnes

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

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

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

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
Index

I-5

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

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

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 I-6

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

Dveloppement dapplications de bases de donnes

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
Index

I-7

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 I-8

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

Dveloppement dapplications de bases de donnes

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

Index

I-9

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 I-10

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

Dveloppement dapplications de bases de donnes

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

Index

I-11

I-12

Dveloppement dapplications de bases de donnes