`

Java获取Oracle存储过程返回的Cursor

阅读更多

 

存储过程:
Package Head:
CREATE OR REPLACE PACKAGE TEST IS
  --返回cursor
  TYPE CURSOR_RESULT IS REF CURSOR;
  PROCEDURE GET_CURSOR_RESULT(P_STARTINDEX IN INT,
                              P_LIMIT      IN INT,
                              P_DEAL_TYPE  IN VARCHAR2,
                              CR           OUT CURSOR_RESULT);
END TEST;

Package Body:
CREATE OR REPLACE PACKAGE BODY TEST IS
PROCEDURE GET_CURSOR_RESULT(P_STARTINDEX IN INT,
                              P_LIMIT      IN INT,
                              P_DEAL_TYPE  IN VARCHAR2,
                              CR           OUT CURSOR_RESULT) IS
  
     BEGIN
       OPEN CR FOR
         SELECT T.*
           FROM (SELECT SDD.ID, SDD.FCU, SDD.FCD, ROWNUM RN
                FROM SDDTEST SDD
               WHERE DEAL_TYPE = P_DEAL_TYPE) T
           WHERE T.RN >= P_STARTINDEX
           AND T.RN < P_STARTINDEX + P_LIMIT;
    END GET_CURSOR_RESULT;
END TEST;

 

Java代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
	private static String DB_CONNECT_STR = "jdbc:oracle:thin:@10.25.18.29:1593:test";
	private static String DB_USER = "scott";
	private static String DB_PASS = "tiger";
	public static DBUtil dbUtil = new DBUtil();
	private Connection con = null;
	
	private DBUtil() {
		try {
			// 推荐使用这个驱动,不推荐oracle.jdbc.driver.OracleDriver
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public Connection getConnection() throws SQLException {
		if (con == null)
			con = DriverManager.getConnection(DB_CONNECT_STR,DB_USER,DB_PASS);
		return con;
	}
}

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import oracle.jdbc.OracleCallableStatement;

/**
 * 1.java中获取Oracle存储过程返回的Cursor。    
 * @author QCD
 *
 */
public class OracleCursorResultTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Connection con = null;
		OracleCallableStatement ocs = null;
		ResultSet rs = null;
		String sql = "{call test.GET_CURSOR_RESULT(?,?,?,?)}";
	
		try {
			con = DBUtil.dbUtil.getConnection();
			ocs = (OracleCallableStatement) con.prepareCall(sql);
			ocs.setInt(1, 10);
			ocs.setInt(2, 20);
			ocs.setString(3, "01");
			ocs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR);
			ocs.execute();
				
			rs = ocs.getCursor(4);
			while (rs.next()) {
				String tradeno = rs.getString("id");
				String fcu = rs.getString("fcu");
				Date fcd = rs.getDate("fcd");
				System.out.println("tradeno:" + tradeno + ",fcu:" + fcu + ",fcd:" + fcd);
			}
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if(rs!=null)rs.close();
				if(ocs!=null)ocs.close();
				if(con!=null)con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}
注:使用ojdbc6.jar,此版本支持JDK6,支持JDBC 4.0。



分享到:
评论

相关推荐

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...

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

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    Oracle存储过程返回结果集

    本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...

    java 与 oracle 存储过程

    4. **游标参数**:如果存储过程返回多行数据,可以使用游标(Cursor)作为输出参数。Java中,需要声明参数类型为`java.sql.ResultSet`,并处理返回的游标。 5. **异常处理**:在Java代码中,需要捕获并处理`...

    用java调用oracle存储过程

    以上代码展示了如何在Java中调用Oracle数据库的三种类型的存储过程:无返回值的存储过程、有单个返回值的存储过程以及返回列表的存储过程。对于无返回值的存储过程,主要涉及的是参数的输入,通过`execute()`方法...

    java调用oracle存储过程(游标)相关

    本文将深入探讨如何使用Java来调用Oracle存储过程,特别是涉及游标的场景。 首先,Oracle存储过程是一种预编译的SQL和PL/SQL代码块,可以在数据库服务器端执行,提供了一种封装业务逻辑的方式。而游标(Cursor)在...

    oracle的存储过程如何返回结果集

    ### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...

    用java调用oracle存储过程总结

    se();}if(stmt != null){stmt.close();}if(conn != null){conn.close();...此外,对于存储过程的错误处理,通常需要在Oracle存储过程中添加异常捕获和处理机制,以便在Java调用时能够得到清晰的错误信息。

    java调用oracle存储过程返回结果集,Record,cursor.[参考].pdf

    总结来说,这个示例展示了如何在Java中调用Oracle存储过程,处理返回的Record类型数据,并将这些数据以Cursor形式返回。在实际开发中,这种技术常用于处理复杂的业务逻辑,尤其是在需要大量自定义数据结构和返回多行...

    JAVA调用ORACLE存储过程通用类

    ### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...

    JAVA调用ORACLE存储过程游标使用

    总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....

    Java调用oracle存储过程总结

    本文将全面总结如何使用Java与Oracle存储过程进行交互。 首先,理解Oracle存储过程的基本概念。存储过程是预编译的SQL语句集合,存储在数据库中,可以接受参数、执行一系列操作并返回结果。它们提高了性能,减少了...

    Java链接Oracle 存储过程 jdbc BLOG

    总的来说,Java通过JDBC API调用Oracle存储过程涉及以下几个关键步骤:建立连接、定义存储过程调用字符串、设置参数、执行存储过程和处理结果。通过熟练掌握这些步骤,你可以轻松地在Java应用中集成和利用Oracle...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...

    Java调用Oracle存储过程的方法

    本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...

    java Oracle存储过程分页整理

    本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

    Java调用带参数的存储过程并返回集合

    本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...

    Java调用oracle存储过程输出自定义对象或二维表

    在Java编程中,与Oracle数据库交互是常见的任务之一,而调用Oracle存储过程可以实现复杂的业务逻辑。本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们...

Global site tag (gtag.js) - Google Analytics