ROW handle (ResultSet resultSet, ROW object) throws SQLException;
pureQuery는 쿼리 결과의 각 행마다 handle() 메소드를 호출하여 해당 행을 표시하는 오브젝트를 작성합니다. pureQuery는 현재 행에 ResultSet 커서를 위치시킨 상태에서 java.sql.ResultSet 인스턴스의 쿼리 결과를 메소드에 전달합니다. 매개변수 오브젝트는 널입니다. 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 오브젝트를 지정할 수 있는 방법은 세 가지입니다.
@Select(sql = "select * from employee where workdept = ?1.departmentNumber") @Handler(rowHandler = customHandlers.SimpleStringRowHandler.class) public Iterator<String> selectEmployeesInDepartment(DepartmentBean department);
RowHandlerWithParameters 구현 클래스는 두 handle() 메소드(두 인수가 있는 하나의 메소드 및 세 매개변수가 있는 하나의 메소드)를 제공해야 합니다. 두 인수 서명이 비어 있는 메소드일 수 있습니다.
@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 ResultSetObject[] (contains the input parameters)
처리 메소드에는 오브젝트 배열에서 SQL문에 전달된 매개변수에 액세스하기 위한 기능이 있습니다.
핸들러를 매개변수로 지정할 때, 매개변수는 메소드 서명에서 마지막 매개변수여야 합니다. RowHandler를 ParameterHandler와 함께 매개변수로 지정하는 경우, 핸들러는 메소드 서명에서 마지막 두 개의 매개변수여야 합니다.
@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);