ROW handle (ResultSet resultSet, ROW object) throws SQLException;
pureQuery ruft für jede Zeile eines Abfrageergebnisses die Methode handle() auf, um das Objekt zu erstellen, das diese Zeile darstellt. pureQuery übergibt die Abfrageergebnisse in einer Instanz von java.sql.ResultSet an die Methode. Dabei befindet sich der Cursor von ResultSet in der aktuellen Zeile. Das Parameterobjekt ist null. Wenn Sie eine Implementierung von RowHandler<ROW> erstellen, implementieren Sie diese Methode, um ein Objekt des Typs <ROW> zu erstellen und zurückzugeben, das die Zeile darstellt, die durch den Cursor der ResultSet-Instanz angegeben ist.
Wenn das ResultSet-Objekt leer ist oder die letzte Zeile des ResultSet-Objekts gelesen wurde, wird die Methode handle() nicht aufgerufen.
Im folgenden Beispiel enthält das zurückgegebene String-Objekt für jede Zeile in einem Abfrageergebnis eine Reihe von Zeichenfolgewerten jeder Spalte mit Begrenzer. In diesem sehr allgemeinen, einfachen Handler ist keine ausführliche Kenntnis hinsichtlich des Eingabe-ResultSet-Objekts erforderlich.
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
}
Es gibt zwei Arten, RowHandler-Objekte für mit Annotationen versehene Methoden anzugeben.
@Select(sql = "select * from employee where workdept = ?1.departmentNumber") @Handler(rowHandler = customHandlers.SimpleStringRowHandler.class) public Iterator<String> selectEmployeesInDepartment(DepartmentBean department);
Wenn Sie einen Handler als Parameter angeben, muss der Parameter der letzte Parameter in der Methodenkennung sein. Wenn Sie RowHandler zusammen mit ParameterHandler als Parameter angeben, müssen die Handler die beiden letzten Parameter in der Methodenkennung sein.
@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);