Paramètres OUT et INOUT dans les objets de type <CAL>

Lorsque vous exécutez une instruction SQL CALL, vous pouvez renvoyer les valeurs des paramètres OUT et INOUT dans un objet de type <CAL>.
Les objets de type <CAL> sont renvoyés par cette version de la méthode call() de l'interface Data :
<CAL> T call(java.lang.String sql, CallHandlerWithParameters<CAL> callHandlerWithParameters, Object... parameters)

Avec cette version de la méthode call() de l'interface Data, l'objet CallHandlerWithParameters est responsable du traitement des éventuels résultats de requête ou nombres de mise à jour renvoyés par la procédure mémorisée. Ces informations ne sont pas mises à disposition de l'application qui a appelé la méthode call(), à moins qu'elles ne soient mises à disposition via l'objet générique <CAL> renvoyé.

L'objet CallHandlerWithParameters assure le traitement des paramètres OUT et INOUT de la procédure mémorisée et leur intégration dans l'objet <CAL> résultant. Là encore, ces informations ne sont pas mises à disposition de l'application qui a appelé la méthode call(), sauf si elles sont mises à disposition via l'objet générique <CAL> renvoyé.

Si l'objet CallHandlerWithParameters a besoin de mettre à jour un éventuel bean ou des paramètres Map transmis lors de l'appel de la méthode call(), ces paramètres doivent être mis à jour par la méthode handleCall() de l'objet CallHandlerWithParameters. En présence d'un objet CallHandlerWithParameters, pureQuery n'effectue aucune mise à jour.

Prenons l'exemple d'une procédure mémorisée qui est définie comme possédant trois paramètres IN, aucun paramètreOUT et certains résultats de requête renvoyés, avec un objet CallHandlerWithParameters pour les traiter. La classe qui implémente CallHandlerWithParameters<CAL> est définie comme suit :

public class mapHandler 
         implements CallHandlerWithParameters<Map<String, Object>>
{
  Map <String, Object> handleCall (CallableStatement cstmt, Object... parameters) throws SQLException
  {
   ...
     }
}

Vous pouvez appeler la méthode call() comme suit :

Connection con = DriverManager.getConnection(...);
Data db = DataFactory.getData(con);
mapHandler chOne = new mapHandler();

Map<String, Object> diffMap = db.call( 
     "CALL getReports(?,?,?)", chOne, p1, p2, p3 );

Commentaires