java數組傳入oracle
上一篇 / 下一篇 2011-12-17 10:55:27 / 個人分類:JSP
數據庫的環境
1* create table t (b varchar2(90))
SQL> /
表已創建。
SQL> create or replace procedure insert_t(a varray_list)
2 is
3 begin
4 for i in 1 .. a.count loop
5 insert into t values (a(i));
6 end loop;
7 end;
8 /
SQL> desc varray_list
varray_list TABLE OF VARCHAR2(90)
java代碼:
import java.sql.*;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
public class java_oracle_array {
public static void main(String args[]) {
Statement stmt;
ResultSet rs;
PreparedStatement pstmt;
Connection connMyDB = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
connMyDB = DriverManager.getConnection("jdbc:oracle:thin:@10.52.23.30:1521:orcl", "plsql", "plsql");
} catch (SQLException ex) { System.out.println(ex.getMessage());
} catch (ClassNotFoundException ex) {
}
try {
CallableStatement proc = connMyDB.prepareCall("{ call insert_t(?) }");
oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor(
"VARRAY_LIST", connMyDB); //定義描述符
List list = new ArrayList();
String[] newURLs = { "abc", "1234" };
//把list中的元素轉換成自定義的類型
ARRAY array = new ARRAY(descriptor, connMyDB, newURLs);
/*重要!這裏輸出的全是“???”試驗NLS
備註:如果在入庫的過程中發現字符串的值沒有入進去,
請檢查有沒有加載該類庫orai18n.jar(11g之前:nls_charset12.jar)*/
proc.setArray(1, array); //給過程傳參數
proc.execute();
String[] tem = (String[]) array.getArray(); //輸出一下
for (String str : tem) {
System.out.println(str);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if(connMyDB != null && !connMyDB.isClosed())
connMyDB.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
運行以後在t表插入兩行
SQL> select * from t;
B
-----------------------------------------------
abc
1234