一.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()方法
时间: 2024-12-28 01:41:06