您的位置:首页 > 数据库 > Oracle

java调用oracle存储过程传入参数为数组的处理

2011-03-03 18:53 771 查看
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 [b]varchar_array[/b]

)

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();

// 创建一个数组描述符,[b]varchar_array 为你在数据库定义的数组类型的名字[/b]

ArrayDescriptor varchar2Desc = ArrayDescriptor.createDescriptor(

"varchar_array [b]", con);[/b]

String [] str={"1","2","3"};

// 将字符串数组转换为oralce能识别的数组

ARRAY vArray = new ARRAY(varchar2Desc, con, [b]str);[/b]

cstmt = con.prepareCall(P_VARCHAR2);

cstmt.setArray(1, vArray);

cstmt.execute();

这样写程序没什么问题,需要注意的是程序使用的jdbc jar包,jar包不合适的话数据就无法插入,这里我使用的是ojdbc14.jar(之前[b]ojdbc5.jar,[b]ojdbc6.jar都不行[b][b][b]),另外要注意的是项目必须导入另一个包nls_charset12.jar,主要是oracle对字符集的支持。ojdbc14+[b][b][b][b][b][b] nls_charset12就没什么问题了。[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

个人意见,暂且留在这里做个参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: