1. 程式人生 > >java向儲存過程傳遞集合型別的變數

java向儲存過程傳遞集合型別的變數

 Oracle中把Array型別作為引數傳入儲存過程並用Java對其進行呼叫的示例是本文我們主要要介紹的內容,接下來我們就開始介紹這一過程.

  使用Oracle Database 11g Enterprise Edition Release 11.2.0.1.0. 步驟:

  1. 建立自定義的型別.由於Oracle沒有提供現成的array型別,這裡用table型別來模擬.

  CREATE OR REPLACE TYPE varchar_array is Table OF varchar2(128) 建立後,varchar_array是一個table,裡面元素的型別為varchar2(128).

  2. 建立一個儲存過程test1. 這個過程接受一個上面建立的varchar_array型別作為輸入引數. 在過程體中,通過一個迴圈遍歷傳入的array中的每一個元素, 插入到一個表tb中:

  create or replace procedure test1(arr in varchar_array) is begin

  FOR i IN arr.first .. arr.last LOOP

  insert into tb values(arr(i));

  END LOOP;

  end test1;

  3. 資料庫這邊的基本上完事了. Java程式如下, 基本上和普通程式差不多:

  String driver = "oracle.jdbc.driver.OracleDriver";

  String strUrl = "jdbc:oracle:thin:@192.168.1.199:1521:orcl";

  Statement stmt = null;

  ResultSet rs = null;

  Connection conn = null;

  try { Class.forName(driver);

  conn = DriverManager.getConnection(strUrl, "user", "pass");

  CallableStatement proc = null;

  proc = conn.prepareCall("{ call test1(?) }");

  //呼叫儲存過程test1

  //不一樣的地方,獲得上面建立的自定義的型別,注意大小寫

  ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("VARCHAR_ARRAY",

  conn);

  List list = new ArrayList();

  list.add("a");

  list.add("b");

  //把list中的元素轉換成自定義的型別

  ARRAY array = new ARRAY(descriptor, conn, list.toArray());

  proc.setArray(1,

  array);

  proc.execute();

  catch (Exception ex)

  {

  ex.printStackTrace();

  } finally

  {

  .....

  各種 close

  ......

  }

  執行該Java程式,查詢表tb,程式中的元素正常插入.

  以上就是Oracle中把Array型別作為引數傳入儲存過程,並用Java對其進行呼叫的示例的全部,本文我們就介紹到這裡了,希望本次的介紹能夠對您有所收穫!