`

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存储过程...

    Spring jdbcTemplate调用Oracle存储过程返回List集合

    下面是使用 Spring jdbcTemplate 调用 Oracle 存储过程返回 List 集合的 Java 代码: ```java package com.zc.test; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql....

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

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

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    在 Oracle9i 之前,不可能从 Java 存储过程直接返回一个 ResultSet,因为没有定义表单 ResultSet-&gt;REF CURSOR 的映射。Oracle9i 增加了此映射,允许从函数返回 ResultSet 或将其作为 OUT 参数传到某个过程。但它仍不...

    Oracle存储过程out游标

    内有三个文件 TESTPACKAGE.txt和CURSOR_TEST2.txt中为oracle建存储过程语句,OracleProcedure.java为java操作存储过程的程序

    Oracle技术_5分钟会用存储过程_存储过程简单实例

    Oracle技术_5分钟会用存储过程_存储过程简单实例 包括建表及初始化数据,直接运行就可以用 包含循环、条件、增改查、参数传入、变量赋值、java调用等 http://blog.csdn.net/ooppookid/article/details/41206963

    oracle ora-各种常见java.sql.SQLException归纳

    这种错误通常是由于开发者在编写插入语句时,忘记了某个主键的唯一值,导致 Oracle 无法将重复的值存储到数据库中。解决这个错误的方法是,检查插入语句中的主键是否唯一,确保主键不重复。 ORA-01001: INVALID_...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    Oracle出现超出打开游标最大数的解决方法

    Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现...

    oracle复习笔记之PL/SQL程序所要了解的知识点

    异常处理机制、存储函数/存储过程、触发器。 为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 为了要有输出的结果,在写PL/SQL程序前都在先运行这一句: set serveroutput on 结构: declare...

    oracle实验报告

    4)、创建一个函数,以客户号为参数,返回该客户可以获得的礼品名称。 5)、创建一个函数,以图书号为参数,统计该图书被订购的总数量。 湖南文理学院实验报告 课程名称 大型数据库技术 实验名称 五、PL/SQL触发器 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2...

    Oracle系统调优详解.docx

    * java_pool_size:以字节为单位,指定 Java 存储池大小,它用于存储 Java 的方法和类定义在共享内存中的表示方法以及调用结束时移植到 Java 会话空间的 Java 对象。 高级参数(续): * large_pool_size:指定...

    ORACLE到DB2应用移植方法探讨.pdf

    * 使数据库对象定义的转换自动化,这些对象包括存储过程、触发器、包、表、视图、索引和序列 * 使用有用的与 SQL 和 Java 兼容的函数,这些函数使转换在功能上是精确和一致的 * 使用 SQL 转换器工具来实时地执行查询...

    Oracle9i的init.ora参数中文说明

    说明: 用于指定数据库为远程 PL/SQL 存储的过程处理被依赖对象的方式。如果设置为 TIMESTAMP, 只有在服务器与本地时间戳相匹配的情况下, 才能执行该过程。如果设置为 SIGNATURE, 在签名安全的情况下即可执行该过程。...

    JAVA-项目面试题.docx

    因为 Redis 的数据是存储在内存中的,而 Oracle、Mysql 的数据是存储在磁盘中的。 * Redis 适合存储频繁使用的热数据,因为它可以提供快速的读写速度。 * 使用 Redis 实现多对多关联,可以通过两个 set 来实现。 四...

    Toad 使用快速入门

    Toad 使用快速入门 目录 一.Toad功能综述 二....三....四....1. Schema browser的用法简介 2. SQL Editor的使用介绍 3. Procedure Editor的...  要用Toad对存储过程进行debug,必须安装Oracle的系统包:dbms_debug...

    PLSQLDeveloper下载

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    PL/SQL 基础.doc

    4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据库内运行, 其他方法为在数据库外对数据库访问,只适合ORACLE; 2. PL/SQL 1) PL/SQL(Procedual language/SQL)...

Global site tag (gtag.js) - Google Analytics