java調用oracle含輸入和輸出數組的存儲過程

package procedure;

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

import oracle.sql.ArrayDescriptor;
import util.DbUtil;

/**
 * 測試 java調用oracle數據庫的存儲過程3   輸入、輸出數組
 * @author sweetanan
 *
 */
public class TestProcedure3 {

 /**
  * @param args
  * @throws ClassNotFoundException
  */
 public static void main(String[] args) throws Exception {
  /*

   此部分爲oracle操作


   create table test1(
   name varchar2(20),
   n1 number(9,2)
   );
   
  
   --1、創建數組
   CREATE OR REPLACE TYPE TEST_ARRAY IS VARRAY(50000) OF NUMBER(9) --定長
   CREATE OR REPLACE TYPE TEST_ARRAY2 AS TABLE OF NUMBER(9,2) --不定長
   --2、開始分頁存儲過程
   create or replace procedure testArr(name in varchar2, arrRows in TEST_ARRAY2, res out TEST_ARRAY2) Authid Current_User is
        begin
        res := TEST_ARRAY2(); --千萬不能少
        for i in 1 .. arrRows.COUNT loop
        insert into test1(name, n1) values(name||arrRows(i), arrRows(i));
        res.EXTEND; --數組擴展長度,第一次loop時,COUNT=1,以後依次+1;
        res(res.COUNT) := arrRows(i) * 2;
        --res(i) := arrRows(i) * 2;
        end loop;
        end;
   /
   */

  Connection con = DbUtil.getConnection();
  CallableStatement cs = con.prepareCall("{call TESTARR(?, ?, ?)}");
  
  ArrayDescriptor aDes = new ArrayDescriptor("TEST_ARRAY2", con);
  double[] pras = {1.1, 2.2, 3.3, 4.5, 5, 6, 7, 8.8, 9, 9.5};
  oracle.sql.ARRAY arr = new oracle.sql.ARRAY(aDes, con, pras);
  
  cs.setString(1, "anan");
  cs.setArray(2, arr);
  
  cs.registerOutParameter(3, oracle.jdbc.OracleTypes.ARRAY, "TEST_ARRAY2");
  
  cs.execute();
  
  oracle.sql.ARRAY res = (oracle.sql.ARRAY)cs.getArray(3);
  
  Object[] strs = (Object[])res.getArray();
  
  for (Object str : strs)
   System.out.println(str);
  
  DbUtil.close(con, cs, null);
 }

}

 

數據庫連接工具類

package util;

import java.sql.*;

public class DbUtil {
 
 public static Connection getConnection(){
  Connection conn = null;
  try {
   //Class.forName("com.mysql.jdbc.Driver");
   //conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp?useUnicode=true&characterEncoding=utf8","root","123456");
   
   Class.forName("oracle.jdbc.driver.OracleDriver");
   String url = "jdbc:oracle:thin:@127.0.0.1:1521:myora";
   String userName = "scott";
   String password = "m123";

   conn = DriverManager.getConnection(url, userName, password);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return conn;
 }
 
 public static void close(Connection conn){
  try {
   conn.close();
  } catch (SQLException e) {

   e.printStackTrace();
  }
 }
 
 public static void close(Connection conn, Statement sta, ResultSet res){
  try {
   if (res != null)
    res.close();
   if (sta != null)
    sta.close();
   if (conn != null)
    conn.close();
  } catch (SQLException e) {

   e.printStackTrace();
  }
 }
 
}

 

發佈了22 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章