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對其進行呼叫的示例的全部,本文我們就介紹到這裡了,希望本次的介紹能夠對您有所收穫!