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

    技术2022-05-19  29

    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就没什么问题了。

     

    个人意见,暂且留在这里做个参考。

     

     

     

     


    最新回复(0)