您的位置:首页 > 其它

Hibernate jdbc查询及存储过程的实现

2015-11-20 17:40 295 查看
1.通过jdbc来执行sql

Transaction tx = session.beginTransaction();
//获得该session使用的数据库连接
java.sql.connection con = session.connection();
PrepareStatement stmt = con.prepareStatement("update CUSTOMERS set AGE=AGE+1 where AGE>0");
stmt.executeUpdate();
tx.commit();


在Hibernate3中,尽管Session的connection方法还存在,但已经被废弃,不提倡使用了,不过Hibernate提供了

替代方案:org.hibernate.jdbc.Work接口表示直接通过JDBC API来访问数据库的操作,Work接口的execute()

方法用于执行直接通过JDBC API来访问数据库的操作:

Transaction tx = session.beginTransaction();
//定义一个匿名累类,实现了Work的接口
</pre><pre name="code" class="java">Work work = new Work(){
public void execute(Connection connection) throws Exception{
//通过JDBC API执行用于批量更新的SQL语句
PrepareStatement stmt = connection.prepareStatement("update CUSTOMERS set AGE=AGE+1 where AGE>0");
stmt.executeUpdate();

}
};
//执行work
session.dowork(work);
tx.commit();


当通过JDBC API中的PrepareStatement接口来执行SQL语句时,SQL语句中涉及到的数据不会被加载到

Session的缓存中,因此不会占用内存空间。

2.实现存储过程

创建一个存储过程

create or replace procedure batch (p_age in number) as
begin
update CUSTOMERS set AGE=AGE+1 where AGE>p_age;
end;


除了可以直接在数据库直接运行存储过程,也可通过程序调用:

Transaction tx = session.beginTransaction();
//获得该session使用的数据库连接
java.sql.Connection con = session.connection();
String procedure = "{call batch(?)}";
//通过jdbc api调用存储过程
CallableStatement csmt = connection.prepareCall(procedure);
csmt.setInt(1,0);//把年龄参数设为0
csmt.executeUpdate();
tx.commit();


Hibernate3使用如下方式调用jdbc

Transaction tx = session.beginTransaction();
//定义一个匿名类实现了work接口
Work work = new Work(){
public void execute(Connection connection) throws Exception{
String procedure = "{call batch(?)}";
//通过jdbc api调用存储过程
CallableStatement csmt = connection.prepareCall(procedure);
csmt.setInt(1,0);
csmt.executeUpdate();
}
};
//执行work session.dowork(work); tx.commit();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: