タイプ <CAL> のオブジェクトの OUT および INOUT パラメーター

SQL CALL ステートメントを実行する場合、タイプ <CAL> のオブジェクトの OUT および INOUT パラメーターの値を戻すことができます。
タイプ <CAL> のオブジェクトは、Data インターフェースのこのバージョンの call() メソッドによって戻されます。
<CAL> T call(java.lang.String sql, CallHandlerWithParameters<CAL> callHandlerWithParameters, Object... parameters)

Data インターフェースのこのバージョンの call() メソッドでは、CallHandlerWithParameters オブジェクトが、ストアード・プロシージャーによって戻されるあらゆる照会結果または更新カウントの処理を担います。その情報は、戻される汎用 <CAL> オブジェクトを介して使用可能にされた場合を除き、call() メソッドを呼び出したアプリケーションでは使用できません。

CallHandlerWithParameters オブジェクトは、ストアード・プロシージャーの OUT および INOUT パラメーターを処理して、結果として生成される <T> オブジェクトにキャプチャーする処理を担っています。ここでも、その情報は、戻される汎用 <CAL> オブジェクトを介して使用可能にされた場合を除き、call() メソッドを呼び出したアプリケーションでは使用できません。

CallHandlerWithParameters オブジェクトが call() メソッドの呼び出しにおいて渡されるすべての Bean または Map パラメーターを更新する必要がある場合、それらのパラメーターは、CallHandlerWithParameters オブジェクトの handleCall() メソッドによって更新される必要があります。 CallHandlerWithParameters オブジェクトが存在する場合、pureQuery はこうした更新を行いません。

例えば、CallHandlerWithParameters オブジェクトを使用して処理を行う、3 つの IN パラメーターを持ち、OUT パラメーターを持たず、いくつかの戻り照会結果を持つように定義されているストアード・プロシージャーについて考えてみましょう。 CallHandlerWithParameters<CAL> を実装するクラスは以下のように定義されます。

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

call() メソッドを以下のように呼び出すことができます。

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

フィードバック