`
Supanccy2013
  • 浏览: 223711 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
注:原创作品,转载请注明出处。


    上篇博文介绍的是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;
			}
		});
}
分享到:
评论

相关推荐

    Java调用oracle存储过程通过游标返回临时表

    如果存储过程返回游标,我们需要声明一个`OUT`参数来接收。 4. **执行存储过程**:通过`pstmt.execute()`执行存储过程。这将打开一个游标,我们可以从游标中获取结果。 5. **处理游标结果**:使用`...

    jdbc调用存储过程,函数,游标

    本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...

    oracle存储过程学习经典入门

    本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...

    存储过程学习经典[语法+实例+调用]

    Hibernate调用Oracle存储过程 Hibernate框架支持直接调用存储过程,通过配置映射文件或注解实现。 ##### 2. Java直接调用Oracle存储过程 使用Java JDBC API可以直接调用Oracle存储过程,通过`CallableStatement`...

    Spring boot调用Oracle存储过程的两种方式及完整代码

    在 Spring Boot 项目中,我们也可以使用 Hibernate 的 SessionFactory 来获取 Session,然后使用 Session 来调用 Oracle 存储过程。下面是一个示例代码: ```java @Repository public class ProdureDAO { @...

    oracle存储过程学习经典[语法+实例+调用].doc

    - **Hibernate调用Oracle存储过程**:Hibernate框架支持调用存储过程,通过映射配置文件或注解指定存储过程的调用方式。 - **用Java调用Oracle存储过程**:使用`CallableStatement`接口来调用存储过程,设置输入...

    调用存储过程的通用方法

    使用ORM(Object-Relational Mapping)框架,如Hibernate、MyBatis,可以简化调用过程。在MyBatis中,可以通过`&lt;select&gt;`标签调用无返回值的存储过程,通过`&lt;insert&gt;`, `&lt;update&gt;`或`&lt;delete&gt;`调用有返回值的存储...

    oracle存储过程学习经典[语法+实例+调用]

    - **Java调用Oracle存储过程**:使用Hibernate框架或纯Java代码可以实现调用Oracle存储过程的功能。 - 无返回值的存储过程调用较为简单。 - 有返回值的存储过程需要特别处理返回值。 - 返回列表的存储过程需通过...

    Oracle PlSql 存储过程

    调用 Oracle 存储过程需要使用 Hibernate 的存储过程调用机制。 七、 用 Java 调用 Oracle 存储过程总结 用 Java 调用 Oracle 存储过程可以使用 JDBC 或 Oracle 的java驱动程序。下面是用 Java 调用 Oracle 存储...

    oracle存储过程学习经典[语法+实例+调用].docx

    4. **Hibernate调用Oracle存储过程** Hibernate作为Java持久层框架,可通过`Session.createSQLQuery()`或`StoredProcedureQuery`来调用存储过程。 - 无返回值的存储过程:直接执行不获取结果。 - 有返回值的存储...

    Oracle+PlSql存储过程

    6. 通过Hibernate调用Oracle存储过程,需要配置和编写映射元数据,以便ORM框架能够正确地调用和处理返回值。 7. 使用Java调用Oracle存储过程分为三种情况:无返回值的过程、有单个返回值的过程和返回列表的过程。 *...

    oracle 存储过程学习经典

    - **使用Hibernate调用存储过程**: Hibernate提供了一种便捷的方式来调用存储过程,并处理结果集。 #### 九、在存储过程中做简单动态查询 - **本地动态SQL**: 直接在存储过程中构建动态SQL语句。 - **使用DBMS_SQL...

    oracle存储过程学习经典

    5. **调用Oracle存储过程**:通过Java或Hibernate等工具调用Oracle存储过程,需要注意参数传递和结果集的处理。 #### 动态SQL与存储过程 在存储过程中执行动态SQL,有两种主要方式: 1. **本地动态SQL**:适用于...

    oracle_存储过程详解

    - Hibernate调用Oracle存储过程需要配置JDBC驱动,并使用`CallableStatement`来执行存储过程。 4. Java调用Oracle存储过程: - 无返回值的存储过程:使用`CallableStatement`的`execute()`方法。 - 有返回值的非...

    2022oracle存储过程procedure秘籍参照.pdf

    4. **Hibernate调用Oracle存储过程**:ORM框架如Hibernate可以调用存储过程,分为无返回值、有返回值和返回列表的存储过程。无返回值的过程直接调用,有返回值的过程通过`CallableStatement`的`registerOutParameter...

    oracle存储过程学习经典[语法+实例+调用

    存储过程还可以通过Hibernate框架或者Java代码调用,这时需要掌握JDBC与Oracle数据库之间的接口编程。调用时,注意区分无返回值的存储过程和有返回值的存储过程。对于有返回值的存储过程,其返回值可以通过OUT参数...

    hibernat调用过程和函数

    ### Hibernate调用存储过程详解 #### 一、概述 Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互过程。本文主要探讨如何在Hibernate中调用存储过程,并通过示例代码来具体分析...

Global site tag (gtag.js) - Google Analytics