ROW handle (ResultSet resultSet, ROW object) throws SQLException;
照会結果の各行ごとに、pureQuery は handle() メソッドを呼び出し、行を表すオブジェクトを作成します。pureQuery は、ResultSet のカーソルを現在行に置いたまま java.sql.ResultSet のインスタンス中の照会結果をメソッドに渡します。 パラメーターのオブジェクトは NULL です。RowHandler<ROW> のインプリメンテーションを作成する場合は、このメソッドを実装して、ResultSet インスタンスのカーソルによって示された行を表すオブジェクト・タイプ <ROW> を作成し、戻します。
ResultSet オブジェクトが空であるか ResultSet オブジェクトの最後の行がすでに読み取られた場合、handle() メソッドは呼び出されません。
以下の例では、照会結果の各行で戻される String オブジェクトには、区切り文字で区切られている各列の一連のストリング値が含まれます。 この汎用かつ単純なハンドラーでは、入力 ResultSet オブジェクトに関する特別な知識は必要ありません。
package customHandlers; import com.ibm.pdq.runtime.handlers.RowHandler; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class SimpleStringRowHandler implements RowHandler<String> { public SimpleStringRowHandler () { delimiter = ", "; } public SimpleStringRowHandler (String delimiter) { this.delimiter = delimiter; } private int columnCount = -1; private String delimiter; String handle (ResultSet resultSet, java.lang.String object) throws SQLException { if (columnCount < 0) columnCount = resultSet.getMetaData().getColumnCount(); StringBuffer myBuff = new StringBuffer(); if (columnCount > 0) { myBuff.append(resultSet.getString(1)); for (int ii=2; ii<=columnCount; ii++) { myBuff.append(delimiter); myBuff.append(resultSet.getString(ii))); } } return myBuff.toString(); } // handle }
RowHandler オブジェクトは、アノテーション付きメソッドに対して 3 つの方法で指定できます。
@Select(sql = "select * from employee where workdept = ?1.departmentNumber") @Handler(rowHandler = customHandlers.SimpleStringRowHandler.class) public Iterator<String> selectEmployeesInDepartment(DepartmentBean department);
RowHandlerWithParameters 実装クラスでは、2 つの handle() メソッド (2 つの引数を持つメソッドと、3 つの引数を持つメソッド) が 提供されなければなりません。 2 つの引数のシグニチャーは空のメソッドにすることができます。
@Select ("SELECT EVENT_NAME, EVENT_LOCATION FROM EVENTS" + "WHERE EVENT_CODE = ? AND EVENT_DATE = ? AND EVENT_TIME = ?") @Handlers (rowHandlerWithParameters = com.bigtickets.eventRowHandlerWithParameters) List<Event> getEvents (eventCode,eventDate,eventTime);
Sql String ResultSet Object[] (contains the input parameters)
このハンドル・メソッドでは、Object 配列で SQL ステートメントに渡されたパラメーターにアクセスできます。
ハンドラーをパラメーターとして指定する場合、そのパラメーターはメソッド・シグニチャーの最後のパラメーターでなければなりません。ParameterHandler と一緒に RowHandler をパラメーターとして指定する場合、これらのパラメーターはメソッド・シグニチャーの最後の 2 つのパラメーターでなければなりません。
@Select(sql = "SELECT * FROM employee where workdept = ?1.departmentNumber") Iterator<String> selectEmployeesInDepartment(DepartmentBean department, ¥ customHandlers.SimpleStringRowHandler rowHandler);
Iterator<String> employees = face.selectEmployeesInDepartment(theDepartment, new customHandlers.SimpleStringRowHandler("¥t"));
@Select(sql = "SELECT * FROM employee where workdept = ?1.departmentNumber") <ROW> Iterator<ROW> selectEmployeesInDepartment(DepartmentBean department, RowHandler<ROW> rh);
Iterator<String> employees = face.selectEmployeesInDepartment(theDepartment, new customHandlers.simpleStringRowHandler("¥t"));
List<EmployeeString> emp = db.queryList("select * from employee where workdept = ?1.departmentNumber",¥ new customHandlers.SimpleStringRowHandler("¥t"), theDepartment);