Hibernate调用带有输入参数,输出参数为cursor的存储过程
Posted stay lucky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate调用带有输入参数,输出参数为cursor的存储过程相关的知识,希望对你有一定的参考价值。
一.Oracle创建表及存储过程
1.创建表T_MONITOR_DEVICE
创建后的表结构
2.创建存储过程
create or replace procedure ProcTestNew(v_monitordeviceid in number,curdata out sys_refcursor ) As begin open curdata for select ID, IP,PORT from T_MONITOR_DEVICE where id=v_monitordeviceid;--带参数测试 -- select ID, IP,PORT from T_MONITOR_DEVICE; end ProcTestNew;
二.java程序中调用
public void TestProc() { Connection conn=null; ResultSet rs=null; try { //this.getSession()为hibernate中的Session对象 conn = SessionFactoryUtils.getDataSource(this.getSession().getSessionFactory()).getConnection(); CallableStatement proc = conn.prepareCall("{call ProcTestNew(?,?) }"); BigDecimal b1 = new BigDecimal(1176); proc.setBigDecimal(1, b1); proc.registerOutParameter(2, OracleTypes.CURSOR); proc.execute(); rs = (ResultSet) proc.getObject(2); MonitorDevice m=new MonitorDevice(); while(rs != null && rs.next()) { m.setId(Integer.valueOf(rs.getObject(1).toString())); m.setIp((String)rs.getObject(2)); m.setPort((String)rs.getObject(3)); System.out.println(m.getId()+","+m.getIp()+","+m.getPort()); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
控制台输出后的结果
三.注意问题
1.CallableStatement 输入参数的set是从1开始的,同理输出参数的获取也是从1开始的
2.存储过程中输入参数为number类型的,在java程序中,对应的参数为BigDecimal,程序中存储过程放进参数用setBigDecimal(),输入参数为VARCHAR2()类型的,java对应的参数为String,程序中的存储过程set参数用setString()方法
以上是关于Hibernate调用带有输入参数,输出参数为cursor的存储过程的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 Cx_Oracle 调用带有 XMLTYPE 输入和输出参数的 Oracle 存储过程
oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,
oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,
Java Spring JDBC 调用存储过程(Stored Procedure) 输入(In)输出(Out)参数