• java调用oracle存储过程返回多条结果集


    oracle版本:11g

    oracle存储过程,使用游标的方式返回多行、多列数据集合:

    复制代码
    CREATE OR REPLACE PROCEDURE SP_DATA_TEST( /*P_ID  IN INT,*/ --传入参数,不需要可注释
                                             O_CUR OUT SYS_REFCURSOR --输出数据,本文重点描述
                                             ) IS
    BEGIN
      OPEN O_CUR FOR
        SELECT *
          FROM (SELECT 'A', SYSDATE - 1
                  FROM DUAL
                UNION ALL
                SELECT 'B', SYSDATE
                  FROM DUAL
                UNION ALL
                SELECT 'C', SYSDATE + 1 FROM DUAL) O
         WHERE 1 = 1;
    END;
    复制代码

    java代码编码,程序直接调用oracle的存储过程:SP_DATA_TEST,调用的方法:call SP_DATA_TEST(?),本文只需要输出数据,不需要输入参数,故只需要一个“?”即可,若是需要传输参数,则根据需要填写多个参数即可。本文直接使用了main方法测试,也可先自建java oracle连接池后使用。

    复制代码
     1 package com.***.test;
     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 public class ProceTest {
    10 
    11     public static void main(String[] args) {
    12         try {
    13             DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
    14             Class.forName("oracle.jdbc.driver.OracleDriver");
    15             String url = "jdbc:oracle:thin:@10.0.0.1:1521:dbcsk";
    16             String username = "****";
    17             String password = "***";
    18             Connection conn = DriverManager.getConnection(url, username,
    19                     password);
    20             String sql = "{call SP_DATA_TEST(?)}";
    21             CallableStatement statement = conn.prepareCall(sql);
    22 //            statement.setInt(1, 1);
    23             
    24             statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
    25             statement.execute();
    26             
    27             ResultSet rs = (ResultSet)statement.getObject(1);
    28             int i=1;
    29             while (rs.next()) {
    30                 System.out.println(rs.getString(1)+":"+rs.getString(2));
    31                 i++;
    32             }
    33             rs.close();
    34             statement.close();
    35             conn.close();
    36             
    37         } catch (SQLException e) {
    38             e.printStackTrace();
    39         } catch (ClassNotFoundException e) {
    40             e.printStackTrace();
    41         }
    42     }
    43 
    44 }
    复制代码

    程序返回值:

    A:2016-03-22 14:46:52
    B:2016-03-23 14:46:52
    C:2016-03-24 14:46:52

    原来的博客密码无法找回了,只能重新注册一个,为方便记录,还得在复制一遍,麻烦死了!

  • 相关阅读:
    出栈序列的可能性判定
    阿里离线数据处理平台2013暑期学校
    终于算完了这道『1+1』
    数据结构学习笔记之一 链表
    经典解释监视器和对象锁
    Sybase中字符串替换函数 STR REPLACE
    使用Arrays sort 方法進行排序
    clustered和nonclustered索引的区别
    Java序列化的作用和反序列化
    Java多线程下载并具断点续传功能JAR
  • 原文地址:https://www.cnblogs.com/luckjinyan/p/12526568.html
Copyright © 2020-2023  润新知