1.调用JDBCTemplate执行存储过程
public List<Map<String, Object>> executeProce(final Object... params) {
return (List<Map<String, Object>>) jt.execute(new CallableStatementCreator() {
public CallableStatement createCallableStatement(Connection con) throws SQLException {
CallableStatement cs = null;
cs = con.prepareCall("call _procedure(?,?)");
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.setString(1, (String) params[0]);
return cs;
}
}, new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
Map<String, Object> mapDatas = null;
cs.execute();
ResultSet rs = (ResultSet) cs.getObject(2);
while (rs.next()) {
mapDatas = new HashMap<String, Object>();
mapDatas.put("id", rs.getObject("id"));
mapDatas.put("name", rs.getObject("name"));
datas.add(mapDatas);
}
return datas;
}
});
}
2.利用SimpleJdbcCalls执行存储过程
public List<Map<String, Object>> executeProce(Object... params) {
SqlParameterSource in = new MapSqlParameterSource().addValue("id",params[0]);
return (List<Map<String, Object>>) new SimpleJdbcCall(jt).withProcedureName("_procedure")
.execute(in).get("v_outcur");
}