|
Procédures stockées et performances de JDBC |
|
|
|
Programmation -
J2EE/Java(script)
|
|
Ecrit par Kamal AOUDA
|
|
12-04-2006 |
|
Procédures stockées et performances de JDBC
Les procédures
stockées contiennent du code SQL (pré)compilé. Elles permettent d'exécuter des
requêtes complexes ou des instructions SQL régulièrement utilisées.
Contrairement aux requêtes simples, les procédures stockées résident dans la
base de données. Pour les déclencher on a pas besoin de transporter le code SQL
du client vers le serveur. Parce qu’elles sont conservées dans la base de
données sous une forme exécutable, il suffit de les appeler un peu comme on le
ferait avec une fonction ou une procédure dans un langage structuré.
A l’instar des méthodes d’objets, les procédures stockées sont capables de
recevoir des paramètres d'entrée et de retourner des valeurs en sortie. Cela
permet de réduire considérablement le trafic entre le client et le serveur en
limitant les données échangées aux appels des procédures et à leurs paramètres.
Notons par ailleurs que l’exécution d’une procédure stockée est plus rapide que
celle d’une requête normale parce qu’elle profite de la puissance du serveur qui
est généralement mieux nanti que le poste client. Un autre avantage des
procédures stockées a trait à la facilité de mise à jour et de déploiement. En
effet parce que le code SQL est centralisé les modifications apportées à la
procédure stockée sont automatiquement répercutées sur tous les clients qui
l’appellent.
Pour appeler une procédure stockée via JDBC, il faut obtenir une référence vers
un objet de type CallableStatement par l'intermédiaire de la méthode prepareCall
de l'interface Connection. Cette méthode reçoit un paramètre de type String qui
correspond au nom de la procédure stockée précédé du mot clé call.
Nous présenterons dans le reste de cette section un exemple simpliste pour
montrer comment appeler une procédure stockée à partir de JDBC.
Sous MySql 5.0 les instructions suivantes permettent de créer une procédure
stockée appelée SHOW_SUPPLIERS(). Ces instructions sont conformes à la norme
SQL:2003 qui
est aussi utilisée dans DB2.
create procedure SHOW_SUPPLIERS ()
SELECT SUPLLIERS.NAME_SU, CAFE.NAME_CAFE
FROM SUPPLIERS, CAFE
WHERE SUPPLIERS.SU_ID = CAFE.SU_ID
order by NAME_SU
La procédure SHOW_SUPPLIERS() sera compilée et stockée dans la base de données
comme un objet qui peut être appelé de façon similaire à l'appel d'une méthode.
Pour appeler SHOW_SUPLLIERS() à partir de JDBC il faut créer un objet
CallableStatement. L’objet CallableStatement contient l'appel d'une procédure et
non la procédure elle-même. Dans le code ci-dessous, les instructions entre
accolade appellent la procédure stockée. Quand le driver rencontre "{call
SHOW_SUPPLIERS}", il traduit ces instructions dans le code SQL natif utilisé par
la base de données pour appeler la procédure stockée nommée SHOW_SUPPLIERS(). La
méthode executeQuery de l’objet cs renvoie le résultat de la procédure stockée
dans un ResultSet.
CallableStatement cs = conn.prepareCall("{call SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();
|