ROW handle (ResultSet resultSet, ROW object) throws SQLException;
Pour chaque ligne d'un résultat de requête, pureQuery appelle la méthode handle() pour créer l'objet représentant la ligne. pureQuery transmet à la méthode les résultats de la requête dans une instance de java.sql.ResultSet, avec le curseur ResultSet positionné sur la ligne en cours. L'objet de paramètre possède la valeur null. Si vous créez une implémentation de RowHandler<ROW>, implémentez cette méthode pour créer et retourner un objet de type <ROW> représentant la ligne indiquée par le curseur de l'instance ResultSet.
Si l'objet ResultSet est vide ou que la dernière ligne de l'objet ResultSet a été lue, la méthode handle() n'est pas appelée.
Dans cet exemple, l'objet String retourné pour chaque ligne dans un résultat de requête contient une série délimitée de valeurs de chaîne pour chaque colonne. Dans ce gestionnaire simple et très général, aucune connaissance précise relative à l'objet ResultSet d'entrée n'est requise.
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
}
Il existe deux manières de spécifier des objets RowHandler pour les méthodes annotées.
@Select(sql = "select * from employee where workdept = ?1.departmentNumber") @Handler(rowHandler = customHandlers.SimpleStringRowHandler.class) public Iterator<String> selectEmployeesInDepartment(DepartmentBean department);
Lorsque vous spécifiez un gestionnaire comme paramètre, le paramètre doit être le dernier paramètre de la signature de méthode. Si vous spécifiez RowHandler avec ParameterHandler comme paramètres, les gestionnaires doivent être les deux derniers paramètres de la signature de la méthode.
@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);