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);
핸들러를 매개변수로 지정할 때, 매개변수는 메소드 서명에서 마지막 매개변수여야 합니다. 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);