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()方法

时间: 2024-12-28 01:41:06

Hibernate调用带有输入参数,输出参数为cursor的存储过程的相关文章

asp.net调用带有输入和输出参数的存储过程

存储过程检测用户名是否重户 create proc checklogin@username nchar(20),@pwd nchar(20),@hasrow int outputasselect @hasrow=count(*) from users where and GO存储过程写入数据create proc adduser@username nchar(20),@pwd nchar(20)asbegininsert into users (username,pwd)values(@user

java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还能提高程序的执行效率, 今天在JAVA+Mysql上也实现了这个功能下面我贴出代码,这次我会讲详细点,让看的朋友能更加清楚它的好处在哪里. 一.封装的代码存储过过程调用方法   关于返回类CallableStatement的解释: CallableStatement 对象为所有的DBMS 提供了一种

Java 调用有输入和输出的存储过程

--有输入和输出的存储过程 SQL> create or replace procedure sp_pro8( spNo in varchar2, spName out varchar2) is begin select sname into spName from student where sid= spNo; end; 1 package oracle; 2 3 import java.sql.CallableStatement; 4 import java.sql.Connection;

MyBatis - 输入和输出参数

基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回值是一个对象的集合,@resultType中只能写该对象的类型,而不是写List<T> 2. 输入参数可以用#{}和${}两种取值方法,两者区别与联系: ① 当传入类型为JDBC基本类型(8种java基本类型+String)时,#{}里面可以写成任意值,${}里面必须写value ② 当传入类型为对象时,两种方式里面都应该写成类中属性名 ③ #{}方

jdbc调用mysql存储过程实现代码带有输入和输出

转载自 http://www.jb51.net/article/34747.htm 1. 创建存储过程 建立一个MySQL的存储过程 add_pro 复制代码代码如下: delimiter // drop procedure add_pro // create procedure add_pro(a int , b int , out sum int ) begin set sum = a * b; end; // 2. 调用存储过程 复制代码代码如下: package com.zhanggao

存储过程输出参数、返回值、返回表及C#调用

存储过程中可以定义输出变量,返回值,执行存储过程还能获得结果集.每个存储过程的默认返回值为0.下面紧接着上文 SQL Server中存储过程Stored Procedure创建及C#调用 基础上写的一个新的Stored Procedure存储过程则包含了输出参数.返回值以及select结果. USE [db] GO /****** Object: StoredProcedure [dbo].[insert_persions] Script Date: 2/25/2015 11:14:11 AM

C#方法参数--值参数,引用参数,输出参数

值参数: 使用值参数,通过复制实参的值到形参的方式,把数据传递到方法,方法被调用的时候,系统做如下操作: 在栈中为形参分配空间: 复制实参到形参. 注意:一个值参数的实参不一定是变量,它可以是任何能够计算成相应数据类型的表达式. 在把变量用作实参之前,变量必须被赋值(除非是输出参数,这个稍后介绍),对于引用类型,变量可以设置成实际引用或者Null. 引用参数: 使用引用参数时,必须在方法的申明和调用中都使用关键字ref修饰符. 实参必须是变量,在用作实参前必须被赋值.如果是引用类型的变量,可以赋

java有参数 无参数方法

有参数java 方法只能返回一个参数 并且要用一个变量来接收参数 PrintFace pfc=new PrintFace(); int max=pfc.max(); 无参数直接调用 重载 public class HelloWorld { public static void main(String[] args) { // 创建对象 HelloWorld hello = new HelloWorld(); // 调用无参的方法 hello.print(); // 调用带有一个字符串参数的方法

C# 调用带有输出参数的分页存储过程

一.创建带有输出参数的分页存储过程 1 use StudentMISDB 2 go 3 select * from Course 4 alter table Course 5 add IsDelete int not null default 0 6 go 7 select * from Course where IsDelete=1 8 9 --update Course set IsDelete=0 10 11 ---循环 添加数据 12 --declare @index int 13 --