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

原创 2015年11月20日 17:40:56
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();



JDBC获取存储过程中select出的结果集

SQLServer在JDBC下获取存储过程中select出的结果值。
  • qq_17004327
  • qq_17004327
  • 2016年11月15日 23:12
  • 1324

Sybase 海量数据分页瞬间完成

海量数据分页(100W条),首次分页大概为10秒左右。以后翻页基本上是瞬间完成。要求是无排序情况下。 目前sybase分页: 1,hibernate分页:hibernate分页前几页和后几页没问题,如...
  • damenggege123
  • damenggege123
  • 2013年04月22日 10:15
  • 5068

JDBC执行存储过程的四种情况

本文主要是总结 如何实现 JDBC调用Oracle的存储过程,从以下情况分别介绍: [1]、只有输入IN参数,没有输出OUT参数[2]、既有输入IN参数,也有输出OUT参数,输出是简单值(非列表...
  • yczz
  • yczz
  • 2015年07月15日 14:07
  • 11903

Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)

package junit.test;import static org.junit.Assert.*;import java.sql.CallableStatement; import java.s...
  • qq_31776219
  • qq_31776219
  • 2016年06月03日 16:48
  • 616

java调用存储过程(jdbc & hibernate)

-
  • shine0181
  • shine0181
  • 2011年04月18日 12:31
  • 1013

hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程

最近要学一个hibernate调用游标,找来找去也没找到如何调用,最后看了许多文章,用jdbc方式来调用也是可以的,但是效率上就不行了,因为每次都要连接数据库,从而放弃了hibernate的对象持久化...
  • a5459530
  • a5459530
  • 2011年11月02日 00:02
  • 1688

jdbc调用存储过程实现增删改查

  • 2016年08月31日 10:49
  • 8KB
  • 下载

JDBC如何实现对存储过程的调用

  • 2014年06月25日 16:02
  • 530KB
  • 下载

jsp 三种查询分页 resultset,hibernate ,存储过程

  • 2010年05月26日 13:01
  • 2KB
  • 下载

jdbc_分页查询,大数据,批处理,存储过程

分页查询 实际上就是每次查询一部分记录,并显示: select * from table_name limit StartIndex, PageSize;——>StartIndex:从第几个记...
  • u010741376
  • u010741376
  • 2015年07月26日 22:17
  • 370
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate jdbc查询及存储过程的实现
举报原因:
原因补充:

(最多只允许输入30个字)