Dans le JDK 1

publicité
Lodomez Olivier
Résumé JBuilder
05/11/2002
Dans le JDK 1.02 l’accès à une base distante était impossible à réaliser depuis une applet.
Dans le JDK 1.1 le but à été de normaliser une couche d’accès aux données. Celle-ci est
connue sous le nom de JDBC (Java DataBase Connectivity)
Ensuite, la norme JDBC 2.0 est apparue, elle apporte un support partiel de SQL3
L’API d’accès aux données de Java : JDBC
JavaSoft a créé cet ensemble de classes et de méthodes (API) en reprenant les spécifications
de Microsoft ODBC.
ODBC est une interface de programmation définie par Microsoft qui permet à des
applications d’accéder à des données à l’aide d’un ensemble de fonctions spécifiques.
Il est ainsi possible de se connecter à des bases de données distante, d’exécuter des requêtes
SQL... des procédures stockées, d’accéder aux métadonnées, … et ce, quel que soit le format
du SGBD.
Les bases Oracle, Informix, InterBase … peuvent ainsi être utilisées par le biais de cette
technique. Il faut pour cela « passer » par ce qu’il est convenu d’appeler un driver. C’est lui
qui va transmettre les ordres et commandes provenant de l’application ou l’applet Java, au
serveur concerné. Si besoin est, une opération de conversion est effectuée afin de traduire les
commandes dans un format compréhensible pat le server.
Puisqu’un driver ODBC doit être stocké sur le poste d’exécution, une applet exécutée depuis
un serveur ne peut jamais utiliser de drivers de type I (passerelle JDBC-ODBC). Rappelons
qu’une applet ne peut pas, pour des raisons de sécurité, accéder au système de fichiers du
poste d’exécution si elle a été chargée à partir d’un serveur distant.
Les composants de la palette DataExpress
La réalisation de votre application base de données va probablement passer par l’utilisation
des composants de la palette dénommée DataExpress. Ces composants prendront non
seulement en charge la gestion du driver JDBC, mais mettrons aussi à votre disposition des
classes de plus haut niveau chargées de vous faciliter la tâche.
DataExpress : dénomination commune pour un ensemble de classes et de composants qui
permettent l’accès aux diverses fonctionnalités base de données définies dans JDBC.
Entièrement écrits en Java, ils sont portables d’un environnement à un autre ; Leur principal
intérêt est de masquer la complexité du développement JDBC. Ils permettent le codage de
l’accès aux données de manière visuelle, en générant pour vous le code requis par les drivers
utilisé. Par ailleurs, définis à un niveau supérieur à JDBC, ils ne sont pas liés à un format de
données.
1
Lodomez Olivier
Résumé JBuilder
05/11/2002
-
DataBase
-> Connexion à l base de données via un driver
-
TableDataSet -> Composant générique ne comprenant pas de mécanisme
d’accès aux données. C’est en fait une coquille vide sur laquelle s’appuient les
autres composants d’accès aux données. (souvent utilisé en conjonction avec
un TextDataFile)
-
TextDataFile -> Destiné à manipuler des fichiers texte, ce composant sert aux
opérations d’importation et d’exportation de données.
-
QueryDataSet -> Composant destinés à la gestion et à l’exécution des requêtes
SQL. Il est à remarquer que c’est le seul composant disponible pour accéder à
une table
-
…
Schéma d’ensemble de l’accès aux données
1. Se connecter à la base de données avec le composant DataBase
2. Exécuter une requête SQL pour accéder à la source de données (QueryDataSet)
3. Visualiser les données via les composants de la JBCL ou dbSwing
Etape 1 : Se connecter à la Base de Données [Le composant DataBase]
La connexion à la base est la première étape à mettre en œuvre pour développer une
application ou une applet avec des bases de données
La connexion est toujours réalisée par l’intermédiaire d’un composant DataBase. La première
opération à réaliser est de placer un composant de ce type dabs la ficher qui va contenir els
données. Comme tous les composants de la palette DataExpress Ce composant est de type non
visuel : il n’apparaîtra pas dans la fiche. Il vous faudra le sélectionner dans l’arbre des
composants du navigateur d’applications.
Pour définir la connexion à la base de données, il faut positionner la propriété connexion de ce
composant.
 accéder à la base de données besoin de renseigner des paramètres
2
Lodomez Olivier
Résumé JBuilder
05/11/2002
Driver : toute connexion s’effectue par le biais d’un driver
Connexion URL : la base à laquelle vous allez vous connecter est toujours identifiée par une
URL
Nom d’utilisateur : Lorsque vous demandez une connexion à un serveur de bases de
données, il faut vous identifié afin de vérifier si vous avez le droit d’accéder aux données. Il
détermine aussi les règles d’accès qui vous concernent : lecture, lecture et écriture, restrictions
diverses … Ce champ contient le nom qui sera transmis au serveur à l’initialisation de la
connexion afin de vous identifier.
Mot de passe : En association avec el nom d’utilisateur, une connexion sur un serveur
nécessite un mot de passe afin de déterminer vos droits d’accès à la base de données.
Le tandem InterClient / InterServer
Borland a implémenté l’accès direct à InterBase sous la forme d’un driver de type III
Celui-ci se compose de deux modules
InterClient : Situé sur le poste client, c’est un ensemble de classes écrites en Java destinées à
prendre en charge le dialogue entre l’application (ou l’applet) et InterServer
InterServer : Cet outil joue le rôle d’interface entre les appels JDBC de l’application qui lui
sont transmis par InterClient et les appels natifs à la base de données. Cette base peut être
indifféremment locale ou distante.
InterClient : implémente la quasi-totalité de la norme JDBC ainsi qu’un ensemble de points
spécifiques à InterBase : cela afin de garantir des performances optimales.
L’accès à InterBase via InterClient permet à une applet d’accéder à une base de données sans
pour cela se préoccuper du système d’exploitation ni de la configuration du poste d’exécution.
3
Lodomez Olivier
Résumé JBuilder
05/11/2002
En effet une solution 100 % Java permet de garantir la portabilité d votre code et de faciliter
la phase de déploiement.
Dans ce cas, rien ne doit être préinstallé sur le poste client, ce qui permet d’affirmer la
supériorité de cette solution par rapport à l’utilisation de drivers de type I ou II
InterServer : Son rôle est de convertir tous les appels d’InterClient en commande
directement compréhensible par InterBase. C’est en fait un processus qui s’exécute sur
l’ordinateur qui contient la base de données. Dans le cas d’une applet, il s’agit très souvent du
Serveur Web.
Principe de fonctionnement
1.
2.
3.
4.
5.
6.
7.
8.
9.
L’utilisateur requiert le chargement d’une page HTML
Cette page lui est expédiée vers le protocole http
Une applet référencée dans la page est transférée sur son poste
le code de l’applet s’exécute sur le poste de l’utilisateur, et la référence au driver
InterClient provoque son transfert à partir de ce même serveur Web.
InterClient s’exécute à partir de l’applet et établit un dialogue avec InterServer, situé
sur le serveur Web
InterServer, à son tour va se connecter à la base de données InterBase et demander
l’exécution d’une requête SQL
l’ensemble de données résultant est transmis au poste client par l’intermédiaire
d’InterServer et d’InterClient.
le programme s’exécute et l’utilisateur manipule les données présentées.
Lors du déchargement de l’applet, le driver InterClient est supprimé du poste client.
Etape 2 : Exécuter une requête de sélection pour obtenir une source de données [Le
composant QueryDataSet]
Moyen indispensable pour accéder à des informations, une requête est une commande , un
ordre envoyé à un serveur afin d’obtenir des informations. Ces demandes sont exprimées
dans un langage universel compréhensible quel que soit le serveur utilisé, c’est-à-dire en
SQL.
A partir de JBuilder, il existe deux techniques différentes pour exécuter une requête
-
utiliser directement les classes de JDBC
Par le biais des composants du DataExpress utilisés sous la forme de ligne de
codes Java ou visuellement depuis le concepteur graphique d’interface.
Avec JBuilder il est impossible de visualiser une table sans passer par l’exécution d’une
requête.
Présentation du composant QueryDataSet
Le composant QueryDataSet est l’un des constituants essentiels du Borland DataExpress. Il a
pour but d’exécuter une requête sur un serveur ;
4
Lodomez Olivier
Résumé JBuilder
-
05/11/2002
transmission d’une requête SQL à un serveur de base de données
récupération des données résultantes et mise à disposition de ces données pour
les autres composants du DataExpress.
La boîte de saisie de requêtes
Cette boîte constitue le principal outil d’aide à la saisie de requêtes du DataExpress.
Une fois la requête définie, il est préférable de la valider en essayant de l’exécuter.
Etape 3 : Visualiser les données
Les quatre bibliothèques de classes disponibles pour visualiser des données sont :
AWT
Swing
dbSwing
JBCL
Les composants WAT
Les composants de la palette WAT sont très intéressants dans le cadre du développement
d’une applet Java, car ils offrent un avantage unique : basée sur le JDK 1.02, les applets sont
toujours correctement exécutées par le navigateur, indépendamment de sa version .
L’unique avantage de l’utilisation d’AWT dans le cadre d’un développement base de données
est d’alléger la phase de déploiement. Effectivement, aucune bibliothèque particulière ne doit
être déployée sur le poste d’exécution puisque tous les composants WAT sont intégrés à la
machine virtuelle.
5
Lodomez Olivier
Résumé JBuilder
05/11/2002
La bibliothèque Swing
Cette bibliothèque présente l’avantage indéniable de se trouver directement dans la machine
virtuelle destinée à exécuter vos programmes Java
Les composants dbSwing
Développés par Borland les composants de la palette dbSwing constituent une extension de la
bibliothèque Swing. La plupart des composants originaux de Swing on été repris dans cette
palette. Borland leur a ajouté une liaison automatique vers les données. Pour cela les
propriétés dataSet et columnName sont intégrées dans chaque composant dbSwing : la liaison
s’effectue par rapport aux composants du DataExpress
La bibliothèque JBCL
Dans la palette JBCL se trouve un ensemble de composants capables d’afficher directement
des données en provenance d’une base de données.
Questions-réponses
Q Les composants TableDataSet et QueryDataSet me semblent destinées respectivement
à visualiser une table et le résultat d’une requête est-ce vrai ?
R Non. Si QueryDataSet permet effectivement d’exécuter une requête SQL, le composant
TableDataSet a un autre rôle. Il s’agit d’un composant « libre » personnalisable à souhait. Il
n’intègre pas en standard de mécanisme d’acquisition de données. Il permet uniquement
l’affichable de données. C’est une sorte de coquille vide qui permet ensuite de définir de
nouveaux composants personnalisés.
On va préférer dbSwing à JBCL
Composants dbSwing
Utiliser la grille de saisie jdbTable
Pour utiliser ce composant, uniquement positionner la propriété dataSet pour identifier la
source de données à présenter dans la grille.
Un certain nombre de comportements standards sont intégrés automatiquement dans une grille
de saisie dbSwing
6
Lodomez Olivier
Résumé JBuilder
-
05/11/2002
Saisie directe dans la grille
Redimensionnement horizontal et vertical des colonnes
Réorganisation des colonnes et définition d’un ordre de positionnement
dynamique
Les contrôles standards : zones de texte, boutons radio, etc.
Il s’agit de présenter des données en provenance d’une table dans des zones de texte (lecture
seule, multiligne, formats …) de visualiser une valeur booléenne ou numérique dans une case
à cocher ou un bouton radio ou encore de saisir une valeur numérique dans un contrôle de
type glissière.

jdbLabel : Destiné à l’affichage de champs en provenance d’une table, ce composant
présente des informations mais ne permet pas leur modification (lecture seule)
7
Lodomez Olivier
Résumé JBuilder
05/11/2002

jdbTextField : A l’inverse du jdbLabel, l’utilisateur pourra saisir la valeur du champ
associé à ce composant. Il sert également pour la saisie de données numériques mais
n’associe pas automatiquement un système de filtrage des caractères saisis.

jdbTextArea : Zone de texte multiligne

jdbTextPane : Ce composant fonctionne comme un jdbTextArea mais propose en plus la
gestion de multiples couleurs et polices de caractères au sein d’une même zone de texte.
Utiliser les zones de liste
jdbList : ce composant propose la sélection d’une valeur dans une liste à sélection simple
Les indispensables : navigateur et barre de status
Deux composants sont prévus pour « habiller » vos applications. Ils permettent d’ajouter
rapidement un navigateur et une barre de status dans votre programme, en liaison avec un
ensemble de données. La liaison effective avec la source de données est réalisée
automatiquement : les composants jdNavToolBar (barre de navigation) et jdbStatusLabel
(barre de statuts) référencent d’eux-mêmes la source de données présente dans la fiche
courante lorsque vous les placez dans une fiche.
Localiser un enregistrement : jdbNavField
Destiné à la recherche de valeurs sur un enregistrement, ce composant fonctionne de deux
façons différentes :

fixe la propriété columnName à un champ de l’ensemble des données, les recherches
sont effectuées uniquement sur la colonne correspondante.
8
Lodomez Olivier
Résumé JBuilder

05/11/2002
Si la propriété columnName n’est pas affectée, la colonne de l’ensemble de données
sur laquelle porte la recherche est celle qui disposait du focus avant l’accès à ce
composant.
Définir les colonnes d’un ensemble de données
Amélioration de la présentation standard des informations en définissant des fioritures :
masques de saisies, format, longueur des zones …
Pour définir ce genre d’attribut, il faut utiliser les objets spécifiques au DataExpress qui
représenteront les différentes colonnes de données de votre table. Il s’agit des objets de la
classe Column qu’il faut associer aux champs de la source de données.
Ces objets colonnes décrivent le type de la donnée, des options ou préférences d’affichage,
des contraintes, des valeurs par défaut …
Un objet Column est associé, non pas à une vue d’une table, mais plutôt aux méthodes
d’accès à l’information.
Possibilité de définir les colonnes d’un ensemble de données :
en laissant agir le DataExpress -> Lorsque la requête est exécutée, les colonnes
sont créées automatiquement. A l’exécution d’une nouvelle requête (associée
au même objet QueryDataSet) les objets précédents sont détruits puis recréés
afin de refléter les changements éventuels de la table réponse.
-
En Créant des colonnes directement dans le code Java -> Ces objets sont
ensuite figés et réutilisés lors des exécutions successives de la requête. Ces
colonnes seront dites persistantes
9
Lodomez Olivier
Résumé JBuilder
05/11/2002
Les métadonnées
Les informations contenues dans les objets et colonnes sont appelées métadonnées : ce sont
des données sur les données de la table.
Les métadonnées sont obtenues dès l’ouverture de l’ensemble de données. JBuilder envoie
une requête au serveur SQL afin d’obtenir des informations sur les données que va lui
retourner la requête suivant (celle qu’on a définie dans le composant QueryDataSet lors du
développement). Ce mécanisme est nécessaire à la bonne manipulation de données de la table.
Les métadonnées sont toujours stockées dans des objets de la classe Column. Elle sont ensuite
utilisées par tous les composants du DataExpress.
Le principe d’acquisition de métadonnées
Lorsque dans du code Java, on exécute une requête à travers un composant QueryDataSet
JBuilder envoie deux requêtes au serveur.


La première consiste à obtenir les métadonnées sur la table résultante. Dans certains
cas, cette phase peut correspondre à l’exécution de plusieurs requêtes.
La seconde correspond à la requête que vous avez spécifiée dans le QueryDataSet :
elle va effectivement demander (et obtenir) les informations qui nous seront
présentées.
La classe Column
La classe Column sert principalement à stocker des métadonnées sur une table réponse.
Les colonnes persistantes
Une colonne persistante est une colonne dont le paramétrage va persister (rester identique)
entre plusieurs exécutions de la requête associée : ce qui permet de conserver sur certaines
colonnes le paramétrage effectué lors du développement : couleur, titre, police... Une colonne
10
Lodomez Olivier
Résumé JBuilder
05/11/2002
non persistante ne conserve pas son paramétrage entre deux exécutions. Lorsqu’une requête
est exécutée sur un serveur, le DataExpress régénère tous les objets colonnes : ainsi, les
valeurs précédentes sont perdues. Pour rendre une colonne persistante, positionnez sa
propriété (setpersist(true)) avant l’exécution de la requête associée.
Lorsqu’une requête est exécutée, l’objet QueryDataSet commence par détruire de la mémoire
toutes les colonnes non persistantes pouvant exister. Les colonnes persistantes sont ainsi
placées en tête de liste. La requête est exécutée et les colonnes non persistantes sont créées
puis placées à la suite des précédentes.
Définir un masque de saisie
Lors de la saisie d’un champ, il est intéressant de contrôler précisément la valeur entrée par
l’utilisateur. A cette fin, JBuilder propose d’associer un masque de saisie à un objet Column.
Ce masque est en fait une chaîne de caractère qui définit le format de la donnée, format à
respecter par l’utilisateur lors de la saisie. Si sa valeur ne correspond pas au masque, la
donnée ne peut pas être validée dans la base. En, fat l’utilisateur ne peut pas sortir du champ
de saisie.
Pour affecter un masque à un champ d’une table, utilisez la propriété editmask de la classe
Column.
11
Lodomez Olivier
Résumé JBuilder
05/11/2002
Créer de nouveaux champs : les champs calculés
Comment définir la valeur d’un champ d’après une combinaison de la valeur des autres
champs d’un enregistrement ? Comment cumuler les valeurs d’une colonne ? Comment
afficher le nombre de champs qui contiennent une valeur précise ? Etc.
La réponse à toutes ces questions est la même : en définissant de nouvelles colonnes dans la
table spécialisée dans le genre de problème. Ces colonnes virtuelles sont appelées champs
calculés
Un champ calculé est un champ qui n’a pas de correspondance physique dans la table
réponse. Il s’agit d’une colonne dont la valeur est calculé par votre programme, juste avant
d’afficher les informations de la table.
JBuilder supporte deux types de champs calculés :

Le champ résulte d’un calcul utilisateur (1) : Le programme est responsable du
calcul de la valeur à afficher dans le champ.
12
Lodomez Olivier
Résumé JBuilder

05/11/2002
Le champ est une agrégation (2) : La valeur est calculée, le plus souvent
automatiquement, à partir d’un groupe d’enregistrement du même ensemble de
données.
Dans ces deux cas, le principe de mise en œuvre commence de la même façon : vous devez
créer une nouvelle colonne dans l’ensemble de données et la rendre persistante.
Définir un champ calculé (1)
La valeur de ce champ résulte d’un calcul utilisateur qui doit être effectué dans votre code
Java.
1. Positionnez la propriété calcType à calculated.
2. Interceptez l’évènement calcFields au niveau de la table à partir de l’onglet
Evènement de l’inspecteur de propriétés La méthode associée est ensuite appelée pour
chaque enregistrement de la table. Si un enregistrement est modifié ou inséré, cette
méthode est aussi appelée afin de rafraîchir la valeur affichée.
3. Codez dans cette méthode la règle de calcul de ce champ.
Les agrégations de champs (2)
L’agrégation consiste à définir un champ dont la valeur est identique pour plusieurs
enregistrements d’une table. Elle est calculée d’après l’ensemble des lignes de ce groupe
d’enregistrements. Cet ensemble de lignes est groupé selon la valeur d’un champ particulier.
En fait, un groupe est un ensemble d’enregistrements dont un champ possède une valeur
identique. Ce champ est dit champ de groupage.
Méthode de réalisation :
1. A partir d’un objet de type DataSet (SELECT * FROM ventes), définir un champ
calculé en positionnant la propriété calcType à aggregated.
2. Lancez la boîte de paramétrage de ce champ en cliquant sur la propriété agg de la
nouvelle colonne.
3. A partir de cette boîte, placez dans al liste de gauche intitulée groupement des
colonnes, les champs dont les valeurs seront groupées.
4. Définissez le champ d’agrégation dans la liste déroulante intitulée Colonne
agrégation. C’est le champ utilisé dans le calcul, c’est-à-dire QUANTITE (dans
l’exemple du livre).
13
Lodomez Olivier
Résumé JBuilder
05/11/2002
5. Choisissez le type de calcul à réaliser sur ce champ.
 CountAggOperator : Nombre d’éléments dans le groupe
 MaxAggOperator : Valeur maximale du champ dans le groupe
 MinAggOperator : Valeur minimale du champ dans le groupe
 SumAggOperator : Somme du champ pour tous les enregistrements du
groupe
6. ensuite, lors de l’exécution de ce programme, la colonne sera visualisée de la même
façon que les autres champs de la table. Cependant sa valeur sera identique pour tous
les enregistrements du groupe.
Aide à la saisie : les champs de références
JBuilder propose de simplifier la saisie de certaines valeurs en définissant ce que l’on appelle
des champs de références. Il s’agit de proposer à l’utilisateur une liste finie d’éléments dans
laquelle il sélectionne une valeur.
En fait l’aide à la saisie consiste à présenter à l’utilisateur la liste des différentes valeurs
possibles pour le champ courant, dans le but de lui épargner la saisie répétitive d’informations
identiques.
La propriété pickList de la classe Column est destinée à gérer les références.
La propriété pickList
Vous pouvez positionner pour toute colonne d’un ensemble de données, la propriété pickList
afin de définir la liste des valeurs possibles lors de la saisie de ce champ. A l’exécution,
l’utilisateur disposera d’une liste déroulante contenant les différentes valeurs du champ. Les
éléments présents dans la liste résultent de l’exécution d’une requête SQL.
Exécution de code SQL à partir de JBuilder
La méthode executeStatement() de la classe DataBase permet d’envoyer une requête SQL,
quelconque à une base de données. Il peut s’agir d’ordres d’insertion ou de modification de
données, de commandes de définition de données telles que la création de tables ou de vues,
ou encore de la gestion de transactions et de droits d’accès.
Utiliser les paramètres dans les requêtes SQL
Il est ainsi possible de rechercher des données par rapport à un critère variable. La valeur de
ce paramètre est le plus souvent positionné par programme juste avant l’exécution de la
requête.

Un paramètre d’une requête est préfixé par le symbole « : » Par exemple :NUMERO
CLIENT. :NOM ou :CODE 345 sont des noms de paramètres correct
14
Lodomez Olivier
Résumé JBuilder
05/11/2002

Il n’y a pas de nombre maximal de paramètres dans une requête

Les paramètres sont obligatoirement placés dans la clause WHERE de la requête

Les types définis pour les paramètres doivent correspondre aux types des champs de la
requête

Presque tous les types de champs peuvent être paramétrés. En fait, seuls les champs
Blobs (images, sons, textes formatés de taille variable …) posent problème
Le composant ParameterRow permet de définir les paramètres d’une requête. Tous les
paramètres d’une même requête sont positionnés dans un seul objet de ce type
1. définir une requête contenant un ou plusieurs paramètres
2. Placez un composant ParameterRow dans la fiche depuis la palette du DataExpress
3. Ajoutez à ce composant tous les paramètres de la requête. La démarche est identique
à celle qui est utilisée pour définir les champs persistants d’une requête
4. pour chaque paramètre, définissez obligatoirement son nom et son type. Ils doivent
concorder avec ceux qui sont définis dans le texte de la requête
5. liez les paramètres à la requête
6. Spécifiez une valeur pour chaque paramètre à l’aide de votre programme Java
7. Exécutez la requête
Acquisition / résolution de données
Le DataExpress solution Borland pour l’accès aux bases de données est fondé sur les notions
suivantes :

Provider/Providing : acquisition de données depuis une base de données. Le transfert
des données physiques vers un objet de la classe DataSet ou dérivé est appelé
providing. L’objet contenant les données est le provider.

Modification des données : par l’utilisateur d’une application ou d’une applet

Resolver / Resolving : toutes les modifications effectuées dans une application sur
l’ensemble de données sont envoyées au serveur. Cette phase est appelée resolving.
L’outil ou le composant utilisé est dit resolver.
Acquisition des données : les classes DataSet
La classe DataSet est la classe de base de tous les composants d’accès aux données

DataSet : Cette classe englobe toute la logique d’accès aux différents types
d’ensembles de données. Etant abstraite cette classe ne peut jamais être instanciée. Il
faut obligatoirement utiliser une classe dérivée.
15
Lodomez Olivier
Résumé JBuilder
05/11/2002

StorageDataSet : implémente la gestion du stockage physique de données. La
manipulation des colonnes de données ainsi que les procédures d’acquisition et de
restitution

QueryDataSet : Cette classe est liée à l’exécution d’une requête

DataSetView : Cette classe permet de réaliser une vue logique à partir d’un objet
StorageDataSet. Lorsqu’une application requiert la visualisation simultanée des
mêmes données selon plusieurs critères, filtres ou tris, quelques objets DataSetView
sont définis avec chacune des propriétés différentes liées à la présentation des
données.

TableDataSet : Cette classe correspond à un ensemble de données dont le type n’est
pas prédéfini. Rien n’existe pour acquérir les données, les classes dérivées sont
responsables de ce travail.

ProcedureDataSet : Destiné à exécuter des procédures stockées, cette classe est l’une
des méthodes d’acquisition de données liée à la norme JDBC.
La classe QueryDataSet
Destinée à exécuter des requêtes SQL de sélection
Column : Contient les objets représentant les colonnes de la table
DataFile : Fichier de donnée utilisé pour les opérations
d’importation/exportation
Query : Définition de la requête SQL
16
Lodomez Olivier
Résumé JBuilder
05/11/2002
CallAggAdd : Calcul des colonnes de type agrégation
CalcFields : Calcul des champs calculés de l’enregistrement
courant
DataChanged : indique qu’un enregistrement vient d’être changé
DataLoaded : signale qu’un composant StorageDataSet vient
d’être chargé
Présenter plusieurs vues d’un même ensemble de données : DataSetView
Mise en œuvre des vues logiques indépendantes des données physiques
Visualiser plusieurs fois des données identiques avec des critères de tris ou de filtres
différents -> DataSetView
1. Placer le composant d’accès aux données (QueryDataSet) dans la fiche et définissez
la requête SQL
2. Définir un DataSetView pour chaque vue logique de ces données
3. Saisir l’ordre de tris, critères de filtres… à l’aide des propriétés des objets
DataSetView. Il s’agit de positionner les propriétés de ce composant comme s’il
s’agissait d’une vue de données classique.
17
Lodomez Olivier
Résumé JBuilder
05/11/2002
Contrôler les modifications : la résolution des données
La résolution des données est la technique qui consiste à reporter les modifications
effectuées sur les données dans les tables de la base de données.
Lorsqu’une requête est exécutée JBuilder détermine si elle peut être résolue avec les
mécanismes standards. S’il ne peut pas utiliser une méthode de résolution prédéfinie, il va
empêcher l’utilisateur de modifier les données en plaçant automatiquement la source des
données en lecture seule.
Pour qu’une table soit toujours modifiable quelles que soient les déductions faites par
JBuilder, effectuez les opérations suivantes :



Positionnez la propriété updateMetaData à la valeur aucun
Définissez tous les champs clés qui doivent être définis dans la requête en tant que
colonnes persistantes
Indiquez qu’il s’agit de champs clés en modifiant la propriété rowID
Le composant QueryResolver
Ce composant a pour but de contrôler la résolution des données directement au niveau de
l’envoi des commandes SQL. Il s’intercale entre le composant QueryDataSet et le driver
d’accès à la base de données. Il contrôle les informations envoyées à la base : aucune
modification ne peut être validée sans un accord préalable de ce composant.
Les composants ProcedureResolver
Permet de définir le code SQL réalisant la mise à jour effective des données.
Un composant ProcedureResolver sert à plusieurs opérations

Pour contrôler le code SQL exécuté lorsqu’une résolution de données intervient.
Chaque traitement peut être défini sous la forme d’une procédure stockée et chaque
appel à l’un de ces traitements doit être défini explicitement.

Pour modifier certaines tables que JBuilder ne sait pas résoudre par lui-même. Par
exemple, si l’une des tables de la requête est une vue. JBuilder ne peut pas utiliser les
mécanismes de résolutions standards, car il ne fait pas la distinction entre une vue et
une table. La vue ne pourra pas être modifiée, puisqu’elle résulte déjà de la
composition de plusieurs tables. Le composant ProcedureResolver permet de
personnaliser la méthode de résolution ainsi, l’utilisateur peut modifier les données.
18
Lodomez Olivier
Résumé JBuilder
05/11/2002
19
Téléchargement