IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Utilisation des procédures stockées dans une application client serveur

1 mai 2003

Par Olivier Constans

 

Introduction

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