English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Procédures stockées JDBC

En apprenantJDBC-instructionEn apprenant un chapitre à la fois, nous avons appris comment utiliser les procédures stockées avec JDBC. Ce chapitre est similaire à cette partie, mais il vous fournira plus d'informations sur la syntaxe d'échappement SQL de JDBC.

Comme l'objet Connection crée des objets Statement et PreparedStatement, il crée également des objets CallableStatement, qui seront utilisés pour exécuter des appels aux procédures stockées de la base de données.

Création d'un objet CallableStatement

Supposons que vous deviez exécuter la procédure stockée Oracle suivante-

CREATE OR REPLACE PROCEDURE getEmpName 
   (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END;

NOTE: La procédure stockée ci-dessus a été écrite pour Oracle, mais nous utilisons une base de données MySQL, donc permettons-nous d'écrire la même procédure stockée pour MySQL, comme suit, afin de la créer dans la base de données EMP-

DELIMITER $$
DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName` 
   (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END $$
DELIMITER ;

Il existe trois types de paramètres : IN, OUT et INOUT. Les objets PreparedStatement ne utilisent que les paramètres IN. Les objets CallableStatement peuvent utiliser tous ces trois types.

Voici la définition de chacun-

PortéeDescription
IN

Les paramètres pour lesquels la valeur n'est pas connue lors de la création de l'expression SQL. Utilisez la méthode setXXX() pour lier les valeurs aux paramètres IN.

OUT

Sa valeur est fournie par les paramètres du SQL retourné. Utilisez la méthode getXXX() pour récupérer les valeurs des paramètres OUT.

INOUT

Fournir en même temps des valeurs d'entrée et de sortie pour les paramètres. Vous pouvez lier les variables en utilisant la méthode setXXX() et récupérer les valeurs en utilisant la méthode getXXX().

Le code suivant montre comment instancier un objet en utilisant cette méthode sur la base du procédure stockée précédente-Connection.prepareCall()CallableStatement

CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}

La variable de chaîne SQL représente un procédure stockée avec des placeholders de paramètres.

L'utilisation de l'objet CallableStatement est très similaire à celle de l'objet PreparedStatement. Vous devez lier les valeurs à tous les paramètres avant d'exécuter la phrase, sinon vous recevrez une SQLException.

Si vous avez des paramètres IN, suivez simplement les mêmes règles et techniques appliquées aux objets PreparedStatement; utilisez la méthode setXXX() correspondant au type de données Java lié.

Lorsque vous utilisez des paramètres OUT et INOUT, vous devez utiliser la méthode supplémentaire de CallableStatement registerOutParameter(). La méthode registerOutParameter() lie le type de données JDBC au type de données attendu du procédure stockée.

Après avoir appelé le procédure stockée, vous pouvez utiliser la méthode getXXX() appropriée pour récupérer les valeurs à partir des paramètres OUT. Cette méthode convertit la valeur de type SQL récupérée en type de données Java.

Fermer l'objet CallableStatement

Comme pour fermer d'autres objets Statement, pour les mêmes raisons, vous devriez également fermer l'objet CallableStatement.

Il suffit d'appeler la méthode close(). Si vous fermez d'abord l'objet Connection, l'objet CallableStatement sera également fermé. Cependant, vous devriez toujours fermer explicitement l'objet CallableStatement pour vous assurer d'une nettoyage correct.

CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall(SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   cstmt.close();
}

Nous avons étudié dansDans les exemples de code appelables,a étudié plus de détails.

Syntaxe d'échappement JDBC SQL

La syntaxe d'échappement vous permet d'utiliser des caractéristiques spécifiques de la base de données qui ne peuvent pas être utilisées par les méthodes et les attributs standard JDBC.
Le format de la syntaxe de l'échappement SQL générique est le suivant-

{mot-clé 'paramètres'}

Voici les séquences d'échappement suivantes, que vous trouverez très utiles lors de l'exécution du programmation JDBC-

mot-clé d, t, ts

Ils peuvent aider à identifier les textes de date, d'heure et de timestamp. Comme vous le savez, deux dbms ne représentent pas les dates et les heures de la même manière. Cette syntaxe d'échappement informe le pilote de présenter la date ou l'heure dans le format de la base de données cible. Par exemple :

{d 'yyyy-mm-dd'}

où yyyy = année, mm = mois;dd = jour. Utilisez cette syntaxe {d'2009-09-03}' est2009année3mois9jour.

C'est un exemple simple qui montre comment insérer une date dans une table-

//Créer un objet Statement
stmt = conn.createStatement();
//Insert data ==> ID, First Name, Last Name, DOB
String sql="INSERT INTO STUDENTS VALUES" +
             "(100,'Zara','Ali', {d '2001-12-16'})";
stmt.executeUpdate(sql);

De même, vous pouvez utiliser l'une des deux syntaxes suivantes,touts

{t 'hh:mm:ss'}

où hh = heure;mm = minute; ss = seconde. Utilisez cette syntaxe {t '13:30:29}' est1:30:29 PM.

{ts 'yyyy-mm-dd hh:mm:ss

C'est une combinaison de la syntaxe des deux syntaxes ci-dessus, où 'd' et 't' représentent les timestamps.

mot-clé escape

Ce mot-clé identifie le caractère d'échappement utilisé dans la clause LIKE. Très utile lorsque vous utilisez les jokers SQL %, qui correspondent à zéro ou plusieurs caractères. Par exemple :

String sql = "SELECT symbol FROM MathSymbols"
              WHERE symbol LIKE '\%' {escape '\'}";
stmt.execute(sql);

Si le caractère的反斜杠(\)est utilisé comme caractère d'échappement, il doit également y avoir deux caractères d'échappement dans les littéraux String Java, car le的反斜杠 est également un caractère d'échappement Java.

mot-clé fn

Ce mot-clé représente les fonctions scalaires utilisées dans le DBMS. Par exemple, vous pouvez utiliser les fonctions SQLlengthpour obtenir la longueur de la chaîne-

{fn length('Hello World')}

Cela retournera11soit la longueur de la chaîne de caractères "Hello World".

mot-clé call

Ce mot-clé est utilisé pour appeler des procédures stockées. Par exemple, pour une procédure stockée nécessitant des paramètres IN, utilisez la syntaxe suivante-

{call mon_procedure(?)};

Pour les procédures stockées nécessitant des paramètres IN et renvoyant des paramètres OUT, utilisez la syntaxe suivante-

{? = appeler mon_procedure(?)};

mot-clé oj

Ce mot-clé est utilisé pour représenter la jointure externe. La syntaxe est la suivante-

{oj extérieur-join}

Où, jointure externe = table {GAUCHE | DROIT | COMPLET} OUTERJOIN {table | condition de recherche. Par exemple-

String sql = "SELECT Employees 
              FROM {oj ThisTable DROIT
              JOIN EXTERNE ThatTable sur id = '100'}";
stmt.execute(sql);