阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Java调用Oracle存储过程返回多条结果集

185次阅读
没有评论

共计 1854 个字符,预计需要花费 5 分钟才能阅读完成。

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 连接池后使用。

package com.***.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ProceTest {

    public static void main(String[] args) {
        try {
            DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            Class.forName(“oracle.jdbc.driver.OracleDriver”);
            String url = “jdbc:oracle:thin:@10.0.0.1:1521:dbcsk”;
            String username = “****”;
            String password = “***”;
            Connection conn = DriverManager.getConnection(url, username,
                    password);
            String sql = “{call SP_DATA_TEST(?)}”;
            CallableStatement statement = conn.prepareCall(sql);
//            statement.setInt(1, 1);
           
            statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
            statement.execute();
           
            ResultSet rs = (ResultSet)statement.getObject(1);
            int i=1;
            while (rs.next()) {
                System.out.println(rs.getString(1)+”:”+rs.getString(2));
                i++;
            }
            rs.close();
            statement.close();
            conn.close();
           
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

程序返回值:

A:2016-04-29 11:12:52
B:2016-03-23 11:12:52
C:2016-03-24 11:12:52

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-04/130813.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1854字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中