OUT- und INOUT-Parameter in Objekten des Typs <CAL>

Wenn Sie eine SQL-Anweisung CALL ausführen, können Sie die Werte der OUT- und INOUT-Parameter in einem Objekt des Typs <CAL> zurückgeben.
Objekte des Typs <CAL> werden von folgender Version der Methode call() der Schnittstelle Data zurückgegeben:
<CAL> T call(java.lang.String sql, CallHandlerWithParameters<CAL> callHandlerWithParameters, Object... parameters)

Bei dieser Version der Methode call() der Schnittstelle Data ist das Objekt CallHandlerWithParameters für die Verarbeitung der von der gespeicherten Prozedur zurückgegebenen Abfrageergebnisse oder Aktualisierungszähler verantwortlich. Diese Informationen sind für die Anwendung, von der die Methode call() aufgerufen wurde, nicht verfügbar, sofern sie nicht über das zurückgegebene Objekt <CAL> zur Verfügung gestellt werden.

Das Objekt CallHandlerWithParameters ist für die Verarbeitung der OUT- und INOUT-Parameter der gespeicherten Prozedur und deren Einbindung in das Ergebnisobjekt <CAL> verantwortlich. Diese Informationen sind wiederum für die Anwendung, von der die Methode call() aufgerufen wurde, nicht verfügbar, sofern sie nicht über das zurückgegebene Objekt <CAL> zur Verfügung gestellt werden.

Wenn das Objekt CallHandlerWithParameters eine beliebige Bean oder Map-Parameter aktualisieren muss, die im Aufruf der Methode call() übergeben werden, müssen diese Parameter mit der Methode handleCall() des Objekts CallHandlerWithParameters aktualisiert werden. Bei Vorhandensein eines Objekts CallHandlerWithParameters werden von pureQuery keine solchen Aktualisierungen vorgenommen.

Beispiel: Eine gespeicherte Prozedur, die so definiert ist, dass sie drei IN-Parameter, keine OUT-Parameter und einige zurückgegebene Abfrageergebnisse mit einem Objekt CallHandlerWithParameters zu deren Verarbeitung aufweist. Die Klasse, durch die CallHandlerWithParameters<CAL> implementiert wird, ist wie folgt definiert:

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

Sie könnten die Methode call() wie folgt aufrufen:

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 );

Feedback