1. 程式人生 > >hibernate 呼叫儲存過程 返回遊標 例項

hibernate 呼叫儲存過程 返回遊標 例項

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Connection con = this.getSession().connection();
CallableStatement sp;
try {
     sp = con.prepareCall("{call Fsp_Plan_CheckPrj(?,?,?)}");
     sp.setString(1, ObjectUtils.toString(params.get("grantNo")));
     sp.setLong(2, NumberUtils.toLong(ObjectUtils.toString(params.get("offOrgCode"))));
     sp.registerOutParameter(3, OracleTypes.CURSOR);
     sp.execute(); // 執行儲存過程
     ResultSet rs = (ResultSet) sp.getObject(3); // 獲取返回的物件,再將物件轉為記錄集  3代表哪個引數
     while (rs.next()) {
          Map<String, Object> resultMap = new HashMap<String, Object>();
          resultMap.put("plan_code", ObjectUtils.toString(rs.getObject(1)));
          resultMap.put("plan_dept", ObjectUtils.toString(rs.getObject(2)));
          resultMap.put("plan_amount", IrisStringUtils.FormatMoney(ObjectUtils.toString(rs.getObject(3))));
          resultMap.put("exec_amount", IrisStringUtils.FormatMoney(ObjectUtils.toString(rs.getObject(4))));
          resultMap.put("plan_name", ObjectUtils.toString(rs.getObject(5)));
          resultMap.put("dept_name", ObjectUtils.toString(rs.getObject(6)));
          list.add(resultMap);
     }
} catch (SQLException e) {
     e.printStackTrace();
}
return list;