1 mai 2003
Par Olivier Constans
IntroductionL’objet de ce tutorial est d’explorer l’écriture d’une application client serveur basée sur les procédures stockées. Tout d’abord pour un petit rappel, une procédure stockée est un petit programme, généralement écrit en langage SQL, et qui est stockée sur un serveur au sein d’une base de donnée. L’utilisation que l’on en fait dans le cadre d’une application client serveur est de déporter au niveau du serveur les règles de gestions de l’application. Cette dernière ne conserve sur le client que les particularités liées à l’interface graphique telle que la gestion des fenêtre et autres arbres , composants GRID… L’intérêt d’utiliser une ou des procédures stockées est multiple. En effet, une procédure stockée permet de déporter au niveau du serveur les règles d’écritures dans la base de donnée et ces opérations sont donc en principe plus rapide car effectuées directement sur le serveur. Ensuite, cela permet de cacher aux regards non désirés les règles de gestions utilisées. En effet, si l’on peut réaliser la même chose dans le programme client via des requêtes SQL gérées par un ODBC ou un JDBC, ces mêmes requêtes peuvent êtres interceptées facilement en mode débogage qui permet d’effectuer des traces laissant apparaître tous nos ordres SQL. Enfin, sur certains SGBD comme par exemple DB2400 UDB, l’utilisation de procédures stockées permet par exemple d’interdire tout accès par des moyens divers (SQL, applications du style excel ..) des données aux utilisateurs , mais par contre leur garantit l’utilisation des données lors qu’ils utilisent une application dédiée , d’où un contrôle total de ce que peut faire l’utilisateur par l’application. Comment réalise t on ne application client serveur avec des procédures stockées ? Pour illustrer cela, nous allons réaliser un petit programme chargé de mettre à jour une table selon les saisies de l’utilisateur. Notre application :Que doit faire une application de maintenance d’une petite table ? Ø Elle doit afficher la liste des enregistrements déjà créés. Ø Permettre l’ajout , la mise à jour ou la suppression d’un enregistrement dans la table. Ø Elle doit garantir une saisie cohérente lors l’ajout ou la mise à jour d’enregistrements en effectuant quelques contrôles sur les données. Toutes ces différentes actions définies plus haut peuvent êtres réalisées dans des procédures stockées. Le programme lui, contiendra la logique d’affichage des données à l’écran et appellera les différentes procédures stockées selon le cas. Design simplifié de l’application : Afficher la liste des enregistrements dans une grille. Permettre par un bouton l’ajout d’un enregistrement. Permettre par un « popup» menu sur un élément de la liste la mise à jour et la suppression. Lors de la saisie de données , dans les cas de l’ajout ou de la suppression d’un enregistrement doit faire l’objet de contrôles. La grille d’affichage sera liée à un query data set effectuant une requête sur la table. La suppression d’un enregistrement exécutera une procédure stockée qui supprimera effectivement l’enregistrement. La validation d’un ajout ou la mise à jour d’un enregistrement exécutera d’abord les contrôles des données, puis si tout est correct lancera une procédure d’ajout ou de mise à jour des données. La table : il s’agit d’une table des codes pays structurée ainsi : Codepays char 2 Nompays char 40 Datemaj timestamp La clé principale est le champ Codepays. Nous aurons 4 procédures stockées écrites en SQL : ListePays AddPays UpdPays DelPays La table et les procédures stockées seront définie en utilisant le SGBD INTERBASE 7 de Borland. Le programme sera lui écrit à l’aide de Jbuilder8 Entreprise, mais pourrait tout aussi bien être réalisé à l’aide de C++ avec par exemple C++Builder6 ou en pascal avec Delphi. Réalisation pratique : Dans Interbase 7 nous allons créer une nouvelle base de données exemple et dans cette base nous créerons notre table et nos procédures stockées. Je passerai les détails et donnerai directement ici les scripts SQL qu’il suffira d’exécuter à l’aide de l’outil SQL Interactif. Script de la table des pays : /* Table:
PAYS, Owner: OLIVIER */ CREATE
TABLE "PAYS" ( "CODEPAYS" CHAR(2) CHARACTER SET ASCII NOT NULL, "NOMPAYS" CHAR(35) CHARACTER SET ASCII NOT NULL, "DATEMAJ" TIMESTAMP NOT NULL , CONSTRAINT
"PAYSPRIMARYKEY1" PRIMARY KEY ("CODEPAYS") ); Pour créer la table, créez une petite base de données (cf mon tutoriel sur l’utillisation de la classe JTREE pour un exemple d’utilisation d’interbase). Placez vous dans cette base de données et ouvrez une session « Interactive SQL ». Entrez le script ci dessus et exécutez le, la table sera crée. Script de la procédure stockées d’ajout d’un pays :Cette procédure prend 2 paramètres en entrée : le code et le nom du pays saisis par l’utilisateur, et insère l’enregistrement dans la table. Vous remarquerez l’utilisation du mot clé TODAY qui permet d’insérer automatiquement la date du jour dans le champ DATEMAJ de la table. CREATE PROCEDURE "Addpays" ( "LEPAYS" CHAR(2) CHARACTER SET ASCII, "NOMPAYS" CHAR(35) CHARACTER SET
ASCII ) AS begin insert into pays (codepays ,nompays,datemaj) values(:lepays ,:nompays,’TODAY’); end Script de la procédure stockées de modification d’un pays :Cette procédure prend 2 paramètres en entrée : le code et le nom du pays saisis par l’utilisateur, et modifie l’enregistrement correspondant au pays choisi dans la table. Les champs modifiés sont le nom du pays et la date de mise à jour. CREATE
PROCEDURE "Updpays" ( "LEPAYS" CHAR(2) CHARACTER SET ASCII, "NOMPAYS" CHAR(35) CHARACTER SET
ASCII ) AS begin update pays set nompays =:nompays, datemaj=’TODAY’ where codepays = :lepays; end L’application java:
Ce programme vous allez le voir est très simple et la puissance de Jbuilder8 contribue une fois de plus à en simplifier l’écriture.
|