随笔-7  评论-24  文章-102  trackbacks-0

文章出处:http://www.diybl.com/course/3_program/java/javajs/2008324/106036.html

hibernate3.0以上提供了两种方式执行存储过程。

第一种 :用JDBC方式(获得 Connection 对象)
Session session =HibernateSessionFactory.getSession(); //获取hibernate会话

Connection conn 
= session.connection(); // 用session对象获取连接

ResultSet rs 
=null;

try
  
{
    CallableStatement call 
= conn.prepareCall("{Call pro_getManager(?,?)}");

   call.setString(
1"admin");
   call.setString(
2"admin");
   rs 
= call.executeQuery();

  }

  
catch (Exception e)
  
{
   e.printStackTrace();
  }
finally
  
{

   rs.close();
//关闭
   session.close();//关闭连接
   HibernateSessionFactory.closeSession(); //关闭会话
  }


这种方式本人感觉与hibernate结合不很紧密,还难以控制,还要自己控制关闭

 
第二种: 用hibernate中SQLQuery 接口执行,其实与执行sql没有两样。
Session session =HibernateSessionFactory.getSession(); //获取hibernate会话

String procName
="{Call pro_getManager(?,?) }"

SQLQuery query 
= session.createSQLQuery(proc);
query.setString(
0"admin");
query.setString(
1"admin");
List list 
=query.list();

session.close();

HibernateSessionFactory.closeSession();

SQLQuery 接口功能很强大吧


APIConnection 方法:
CallableStatement prepareCall(String sql) throws SQLException

创建一个 CallableStatement 对象来调用数据库存储过程。CallableStatement 对象提供了设置其 IN 和 OUT 参数的方法,以及用来执行调用存储过程的方法。

 

public interface CallableStatement extends PreparedStatement

用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。

   {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
   {call <procedure-name>[(<arg1>,<arg2>, ...)]}

 IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法获取的。

CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用继承自 Statement 的操作处理的。

posted on 2008-10-04 22:13 黄小二 阅读(1237) 评论(3)  编辑  收藏 所属分类: S/S2SH

评论:
# re: [转] Hibernate3.0以上中执行存储过程[未登录] 2010-01-16 16:46 | AAA
第二种方式如何获得返回值啊??  回复  更多评论
  
# re: [转] Hibernate3.0以上中执行存储过程[未登录] 2010-01-16 16:47 | AAA
返回值不是一个结果集的!  回复  更多评论
  
# re: [转] Hibernate3.0以上中执行存储过程 2011-12-29 15:31 | binbinaccp
conn.prepareCall("{Call pro_getManager(?,?)}");
我写这句为什么编译报错?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: