hibernate调用返回游标的存储过程

标签: hibernate 游标 存储过程 | 发表时间:2014-08-05 22:57 | 作者:Supanccy2013
出处:http://www.iteye.com
注:原创作品,转载请注明出处。


    上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程。
    此此扁博文的存储过程的功能相当于是jdbc调用select 的作用。

1,创建oracle中的包,并在该包中创建的游标类型。
---创建oracle的程序包,在该包中创建一个游标类型
--该类型在存储过程中用来生命输出参数的类型
create or replace package pkg_return_list
as
  type list_cursor is ref cursor;
end pkg_return_list;


2,创建oracle存储过程,该存储过程有唯一的输出参数。
--创建从java程序调用的存储过程,注意该存储过程的唯一输出
--参数的类型是个游标类型。
create or replace procedure pro_return_list(p_cursor out pkg_return_list.list_cursor)
as
begin
  open p_cursor for select * from TBL_ADDRESS;
end pro_return_list;



3,java调用存储过程的主程序。
package com.supan.test;
import com.supan.dao.imp.UserDaoImp;
public class hibernate1
{
	public static void main(String[] args)
	{
		
		UserDaoImp udi = new UserDaoImp();
		udi.callprocedureOfCursor();
	}
}


4,java的dao层方法
	//调用返回游标的存储过程
	public void callprocedureOfCursor()
	{
		//没有spring的注入,只有人工苦逼的注册sessionFactory属性
		Configuration cof = new Configuration().configure();
		this.setSessionFactory(cof.buildSessionFactory());
		
		//定义存放结果的结果map
		final Map<String,String> result = new HashMap<String, String>();
		getHibernateTemplate().execute(new HibernateCallback<Object>()
		{
			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException
			{
				session.doWork(new Work()
				{
					@Override
					public void execute(Connection conn) throws SQLException
					{
						CallableStatement proc = null;
						ResultSet rs = null;
						try
						{
							proc = conn.prepareCall("{call pro_return_list(?)}");
							
							//注意:这里是注册输出参数的类型
							proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
							
							//执行存储过程
							proc.execute();
							
							//获取存储过程的输出参数
							rs = (ResultSet)proc.getObject(1);
							
							while(rs.next())
							{
								//注意访问结果集是从索引位置1开始的,而不是0
								System.out.println(rs.getLong(1));
								System.out.println(rs.getString(2));
								System.out.println(rs.getString(3));
								System.out.println(rs.getString(4));
								System.out.println("----------------");
							}
							
						}
						catch(Exception e)
						{
							//logger.error("访问数据库失败");
							e.printStackTrace();
						}
						finally
						{
							if(null != proc)
							{
								try
								{
									proc.close();
								} catch (Exception e2)
								{
									//logger.error(close proc happend error);
									e2.printStackTrace();
								}
							}
						}
					}
				});
				
				return null;
			}
		});
}


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hibernate 游标 存储过程] 推荐:

hibernate调用返回游标的存储过程

- - Oracle - 数据库 - ITeye博客
注:原创作品,转载请注明出处.     上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程.     此此扁博文的存储过程的功能相当于是jdbc调用select 的作用. 1,创建oracle中的包,并在该包中创建的游标类型. ---创建oracle的程序包,在该包中创建一个游标类型 --该类型在存储过程中用来生命输出参数的类型 create or replace package pkg_return_list as type list_cursor is ref cursor; end pkg_return_list;.

mysql存储过程 游标

- - ITeye博客
end if; insert into table3 (name) select name from table2 where id =i; end loop cursor_loop; CLOSE c1; end $ delimiter ;. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

Hibernate 调用返回值的存储过程

- - Oracle - 数据库 - ITeye博客
注:原创作品,转载请注明出处.      曾一度认为oracle的函数和存储过程的区别,就是function能返回值,存储过程不能返回值. 但在项目中的很多存储过程都有返回值,仔细发现得出问题的窍门.      存储过程的返回值是通过参数实现的,存储过程的参数有三种类型一种是 in,一种是 out.

SQL 存储过程之游标

- - CSDN博客推荐文章
使用游标循环 SQL 查询结果: . --- 声明变量 DECLARE @bid nvarchar(30); DECLARE @address nvarchar(50); --- 定义游标 DECLARE cur CURSOR for. select bid,[Address] from building; --- 打开游标 OPEN cur.

MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表

- - CSDN博客数据库推荐文章
--  大表数据迁移 , 每天凌晨 1 点到 5 点执行 ,执行间隔时间10分钟, 迁移旧数据到历史表.    DECLARE EXIT HANDLER FOR SQLSTATE '02000'  /**包含游标not found*/.          SELECT1, 'oal_xxx','pro_oal_log_move',CONCAT('primary key:',p_oalid,' 游标执行正常结束.

oracle 存储过程 基础

- - ITeye博客
差不多一年没写过存储过程,最近要写,发现基本忘了,google一番之后,觉得很有必要把基础的东西写下来备忘. decalre -- 变量声明 var1 number(2);. -- 仅声明 var2 char(2) := '11';. -- 在声明的同时初始化 begin. -- 语句 end; -- 语句块结束.

Hibernate面试题

- - ITeye博客
什么是Hibernate的并发机制. Hibernate并发机制:. a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次,. 如果一个Session 实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用.

Hibernate Lazy属性

- - 博客园_首页
  Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术. 这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录. 通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销. Hibernate 的延迟加载本质上就是代理模式的应用,当程序通过 Hibernate 装载一个实体时,默认情况下,Hibernate 并不会立即抓取它的集合属性、关联实体所以对应的记录,而是通过生成一个代理来表示这些集合属性、关联实体,这就是代理模式应用带来的优势.

Hibernate 缓存

- - ITeye博客
1数据缓存:(date caching) 是一种将数据暂时存于内存缓存去中的技术,缓存通常是影响系统性能的关键因素. 2.ORM的数据缓存策略有3中.   1.事务级缓存:  分为 数据库事务和 应用级事务,是基于Session的生命周期的实现,每个session都会在内部维持一个数据缓存, 随session的创建和消亡.

hibernate优化

- - 开源软件 - ITeye博客
原文 http://developer.51cto.com/art/200906/129539.htm. 文章分为十三个小块儿对Hibernate性能优化技巧进行总结性分析,分析如下:. 一、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.