分类
数据库

JDBC(或Hibernate)调用Oracle存储过程

1、存储过程

包头:

create or replace package uwf.TOOLS is
  -- Author  : lwq
  -- Created : 2008-3-18 lwq 11:59:35
  -- Purpose : 
  -- Public type declarations
  function PROCESSDEFINITIONS_OF_USER(userID in long)return SYS_REFCURSOR;
end TOOLS;

包体:

create or replace package body uwf.TOOLS as
function PROCESSDEFINITIONS_OF_USER(userID in long) 
return SYS_REFCURSOR
as 
 definitions_ SYS_REFCURSOR;
begin
      OPEN definitions_ FOR 
      select ID_,NAME_
      from uwf.jbpm_processdefinition;
      return definitions_;
end PROCESSDEFINITIONS_OF_USER;
end TOOLS;

2、JDBC调用存储过程

try { 
  Connection conn =XXXXX.connection();
  CallableStatement cstmt = conn.prepareCall("{?= call uwf.TOOLS.PROCESSDEFINITIONS_OF_USER(?)}"); 
  cstmt.setLong(2, userID);
  cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); 
  cstmt.execute(); 
     ResultSet rs = (ResultSet)cstmt.getObject(1);
       while(rs.next()){
         System.out.println("id : " + rs.getLong("ID_"));
         System.out.println("name : " + rs.getString("NAME_"));
       }// end while
  } catch (SQLException sqlException) { 
   sqlException.printStackTrace(); 
  }

3、Hibernate调用存储过程

List retList=null;
  Query query= XXXXXX.getSession().getNamedQuery("getProcessDefinitionsByUser"); 
  query.setLong(0, userID);
  retList = query.list();
  Iterator it =retList.iterator();
  while(it.hasNext())
  {
   Object[] pdObject = (Object[])it.next();
   //流程定义主键
   Long pdId=((BigDecimal)pdObject[0]).longValue();
   //流程定义名字
   String pdName=pdObject[1].toString();
    。。。。。。。。
  }

在hbm文件里要配置

<sql-query name="getProcessDefinitionsByUser" callable="true">
   {?=call uwf.TOOLS.PROCESSDEFINITIONS_OF_USER(?)}
  </sql-query>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注