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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM