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

 

原來的博客密碼無法找回了,只能重新註冊一個,爲方便記錄,還得在複製一遍,麻煩死了!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章