Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 31. Interface JDBC | Avance rapide | Suivant |
Le pilote JDBC de PostgreSQL supporte totalement l'appel de procédures stockées PostgreSQL.
Exemple 31-4. Appeler une fonction interne
Cet exemple montre comment appeler une fonction interne de PostgreSQL, upper, qui convertit simplement l'argument fourni en majuscule.
// Désactive les transactions. con.setAutoCommit(false); // Appel de procédure. CallableStatement upperProc = con.prepareCall("{ ? = call upper( ? ) }"); upperProc.registerOutParameter(1, Types.VARCHAR); upperProc.setString(2, "minuscule vers majuscule"); upperProc.execute(); String upperCased = upperProc.getString(1); upperProc.close();
CallableStatement
Toutes les considérations s'appliquant à
Statement
et
PreparedStatement
s'appliquent à
CallableStatement
mais vous devez considérer une
restriction supplémentaire :
Vous devez être à l'intérieur d'une transaction pour appeler une procédure stockée.
ResultSet
à partir d'une
procédure stockéeLes procédures stockées de PostgreSQL peuvent renvoyer des résultats au moyen d'une valeur de type refcursor. Un refcursor.
En extension de l'API JDBC, le pilote JDBC de
PostgreSQL peut renvoyer des valeurs de type
refcursor comme valeurs
ResultSet
.
Exemple 31-5. Obtenir des valeurs refcursor à partir d'une fonction
Lors de l'appel d'une fonction renvoyant un
refcursor, vous devez convertir le type de retour de
getObject
à un
ResultSet
// Désactive les transactions. con.setAutoCommit(false); // Appel de procédure. CallableStatement proc = con.prepareCall("{ ? = call fait_requete ( ? ) }"); proc.registerOutParameter(1, Types.Other); proc.setInt(2, -1); proc.execute(); ResultSet results = (ResultSet) proc.getObject(1); while (results.next()) { // faire quelque chose avec les résultats... } results.close(); proc.close();
Il est aussi possible de traiter la valeur de
retour refcursor comme un type distinct en lui-même. Le
pilote JDBC fournit la classe
org.postgresql.PGRefCursorResultSet
dans ce
but.
Exemple 31-6. Traiter refcursor comme un type distinct
con.setAutoCommit(false); CallableStatement proc = con.prepareCall("{ ? = call fait_requete ( ? ) }"); proc.registerOutParameter(1, Types.Other); proc.setInt(2, 0); org.postgresql.PGRefCursorResultSet refcurs = (PGRefCursorResultSet) con.getObject(1); String cursorName = refcurs.getRefCursor(); proc.close();
Précédent | Sommaire | Suivant |
Exécuter des mises à jour | Niveau supérieur | Créer et modifier les objets de la base de données |