Holas, ya sé que ya tienes resuelta la duda, pero os mando como he
hecho una llamada a un SP con parámetros de entrada y salida. Supongo
que si se quisiera usar un map para pasar los parámetros se podría
usar NamedParameterJdbcTemplate.
//////////////////////////////////////////////////////////////////////////////////////////////////////////
public ReportRequest getDBRequest(final Integer idRequest) {
log.debug("Inicio obtener DBRequest");
ReportRequest execute = (ReportRequest) jdbcTemplate.execute(
new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(final Connection
con)
throws SQLException {
final CallableStatement cs = con.prepareCall("{call
Pkg_reports.pr_getrequestinfo(?,?,?,?,?,?,?)}");
cs.setInt(1, idRequest);
cs.registerOutParameter(2, Types.INTEGER);
cs.registerOutParameter(3, Types.INTEGER);
cs.registerOutParameter(4, Types.INTEGER);
cs.registerOutParameter(5, Types.VARCHAR);
cs.registerOutParameter(6, Types.DATE);
cs.registerOutParameter(7, Types.VARCHAR);
return cs;
}
},
new CallableStatementCallback<ReportRequest>() {
public ReportRequest doInCallableStatement(final
CallableStatement cs) {
ReportRequest rr = null;
try {
cs.execute();
if (cs.getString(7) == null) {
rr = new ReportRequest();
rr.setReport_request_id(idRequest);
rr.setUser_id(cs.getInt(2));
rr.setReport_id(cs.getInt(3));
rr.setReport_type(cs.getInt(4));
rr.setIp_adress(cs.getString(5));
rr.setRequest_date(cs.getTimestamp(6));
}
} catch (final SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rr;
}
}
);
log.debug("Fin obtener DBRequest");
return execute;
////////////////////////////////////////////////////////////////////////////////////
Saludos.