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