Java 返回结果集的存储过程

--返回结果集的存储过程
--1.创建一个包
create package myTestPackage as
type test_cursor is ref cursor;
end myTestPackage;

--2.创建存储过程
create procedure sp_pro9(
       spNo in number,
       p_cursor out myTestPackage.test_cursor) is
begin
  open p_cursor for
       select * from student where classId=spNo;
end;

--3.在Java中调用
 1 package oracle;
 2
 3 import java.sql.CallableStatement;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8
 9 import oracle.jdbc.OracleTypes;
10
11
12 public class Test02 {
13
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16                 Connection conn = null;
17                 CallableStatement cs = null;
18                 try {
19                     //1.加载驱动
20                     Class.forName("oracle.jdbc.driver.OracleDriver");
21
22                     //2.连接
23                     String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE12C";
24                     String userName = "sys as SYSDBA";
25                     String password = "fairy6280";
26                     conn = DriverManager.getConnection(url,userName,password);
27
28                     //3.创建CallableStatement
29                     String procedure = "{call sp_pro9(?,?)}";
30                     cs = conn.prepareCall(procedure);
31                     cs.setInt(1, 301);
32                     cs.registerOutParameter(2, OracleTypes.CURSOR);
33                     cs.execute();
34
35                     //得到结果集
36                     ResultSet rSet = (ResultSet)cs.getObject(2);
37                     while(rSet.next())
38                     {
39                         String sidStr = "学号:"+ rSet.getInt(1);
40                         String sNameStr = ",姓名" + rSet.getString(2);
41                         System.out.println(sidStr+sNameStr);
42                     }
43
44                 } catch (Exception e) {
45                     // TODO Auto-generated catch block
46                     e.printStackTrace();
47                 }
48                 finally{
49                     //关闭
50                     try {
51                         cs.close();
52                         conn.close();
53                     } catch (SQLException e) {
54                         // TODO Auto-generated catch block
55                         e.printStackTrace();
56                     }
57                 }
58     }
59
60 }

时间: 2024-08-25 05:41:03

Java 返回结果集的存储过程的相关文章

java servlet调用带有多个返回结果集的存储过程

一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要返回更多结果集也是一样的,如果需要判断,就继续增加存储过程参数,如果不需要判断就直接在存储过程中,增加查询的SQL语句即可).实现这个功能还有更简单的方法,可以写SQL关联语句查询出两张表的结果,返回一个组合的结果集.我这里当然是为了实现这个效果,所以把它的实现复杂化了.继续说下我今天在mysql上

存储过程不返回记录集导致ADO程序出错

HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF()       {return m_pRecordset->adoEOF == VARIANT_TRUE;}; m_pRecordset->adoEOF 将执行下面的函数(见msado15.tli) 1    inline VARIANT_BOOL Recordset15::GetadoEOF (

mybatis调用mysql存储过程返回结果集

存储过程中经常需要返回结果集. Mysql 中直接用 select 即可返回结果集.而 oracle 则需要使用游标来返回结果集.这一点 Mysql 相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP procedure IF EXISTS pro_sql_data1 $$ CREATE procedure pro_sql_data1(in sear_name varchar(2000)) BEGIN if sear_name is not null

(转)jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法

本文转载自:http://hedyn.iteye.com/blog/856040 在JDBC中调用SQL Server中的存储过程时出现如下异常: com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171) at com.microsof

oracle创建存储过程并返回结果集(附C#调用代码)

使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我们怎么实现跟SQL SERVER同样的功能呢?且看以下代码: create or replace procedure sp_getdept (rep_type in varchar2,sel in varchar2,result out sys_refcursor) as seq varchar2(

oracle 存储过程返回结果集

好久没上来了, 难道今天工作时间稍有空闲, 研究了一下oracle存储过程返回结果集. 配合oracle临时表, 使用存储过程来返回结果集的数据读取方式可以解决海量数据表与其他表的连接问题. 在存储过程中先根据过滤条件从海量数据表中选出符合条件的记录并存放到临时中, 可以通过一个视图将临时表与其他相关表连接起来, 从而避免海量数据造成的连接效率问题. 本文只讨论使用存储过程返回结果集. 具体实现如下: -- 启用服务器输出---------------------set serveroutput

Oracle在存储过程中如何返回结果集

Oracle和Sqlserver不一样的地方有很多. 个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了. 这里,就用最简单的例子说明存储过程返回结果集的例子 CREATE OR REPLACE PROCEDURE 存储过程名( 字段名 in VARCHAR2, l_result OUT TYPES.RQ_REF_CURSOR -- 包里面方法名 ) is str_sql varchar2(8000) := ''; begin str_sql

postgresql 函数返回结果集(zz)

pgsql function 系列之一:返回结果集--------------------------------------------------------------------------------我们在编写postgresql数据库的函数(或称为存储过程)时,时常会遇到需要返回一个结果集的情况,如何返回一个结果集,返回一个结果集有多少种方式,以及如何选择一个合适的方式返回结果集,这是一个需要仔细考虑的问题.本文仅简单的罗列出各种返回结果集的方式并试图分析他们的特点,而采用何种方式则

转:Java面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101

Java面试题集(51-70) Java程序员面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101 摘要:这一部分主要讲解了异常.多线程.容器和I/O的相关面试题.首先,异常机制提供了一种在不打乱原有业务逻辑的前提下,把程序在运行时可能出现的状况处理掉的优雅的解决方案,同时也是面向对象的解决方案.而Java的线程模型是建立在共享的.默认的可见的可变状态以及抢占式线程调度两个概念之上的.Java内置了对多线程编程的支