java调用参数为数组的存储过程,主要是能正确的把java的数组类型转化为oracle能识别的的数组类型,这一步网上的例子很多,也就不多说了。在最初做这个的时候发现,当传入数字数组的时候,数组里的值能正确的插入到数据库中,但是其他类型的数组却无法插入,程序也不报错,后来查了很久,乱搞一通,发现了问题所在,先写在这里,也算是个经验……
oracle程序:
先创建一个数组类型和一个测试表
create or replace varchar_array as table of varchar2(100)
create table test(
ID NUMBER(10),
NAME VARCHAR2(100)
)
存储过程:
create or replace procedure P_VARCHAR2(
i_varchar IN varchar_array
)
is
begin
FOR i in 1..i_varchar.count loop
insert into test values (i,i_varchar(i));
end loop;
end;
java程序:
前面的获取连接什么的就不写了,主要写数据转换的
con = DBConnection.getConn();
// 创建一个数组描述符,varchar_array 为你在数据库定义的数组类型的名字
ArrayDescriptor varchar2Desc = ArrayDescriptor.createDescriptor(
"varchar_array ", con);
String [] str={"1","2","3"};
// 将字符串数组转换为oralce能识别的数组
ARRAY vArray = new ARRAY(varchar2Desc, con, str);
cstmt = con.prepareCall(P_VARCHAR2);
cstmt.setArray(1, vArray);
cstmt.execute();
这样写程序没什么问题,需要注意的是程序使用的jdbc jar包,jar包不合适的话数据就无法插入,这里我使用的是ojdbc14.jar(之前ojdbc5.jar,ojdbc6.jar都不行),另外要注意的是项目必须导入另一个包nls_charset12.jar,主要是oracle对字符集的支持。ojdbc14+ nls_charset12就没什么问题了。
个人意见,暂且留在这里做个参考。