java.sql.SQLException:将ArrayList传递给Oracle.sql.ARRAY时无法转换为内部表示形式

java.sql.SQLException:将ArrayList传递给Oracle.sql.ARRAY时无法转换为内部表示形式,java,sql,arrays,oracle,arraylist,Java,Sql,Arrays,Oracle,Arraylist,嗨,这是我的代码 List<String> listA = new ArrayList<String>(0); String[] arrA = new String[100]; listA.add("aaa"); listA.add("bbb"); arrA[0]="aaa"; arrA[1]="bbb"; conn = DriverManager.getConnection(URL, USER, PASS); oracle.jdbc.OracleConnection o

嗨,这是我的代码

List<String> listA = new ArrayList<String>(0);
String[] arrA = new String[100];
listA.add("aaa");
listA.add("bbb");
arrA[0]="aaa";
arrA[1]="bbb";
conn = DriverManager.getConnection(URL, USER, PASS);
oracle.jdbc.OracleConnection oraConn = (oracle.jdbc.OracleConnection) conn;
ArrayDescriptor des = ArrayDescriptor.createDescriptor("ARRAY_TABLE", oraConn);
//*****************
ARRAY array_to_pass1 = new ARRAY(des, conn, arrA );//* exception
CallableStatement cstm = (OracleCallableStatement) conn.prepareCall("{call xyz.procedure1(?,?)}");
cstm.setArray(1, array_to_pass1);
cstm.setInt(2, 1);
listA=newarraylist(0);
字符串[]arrA=新字符串[100];
增加(“aaa”);
列表A.添加(“bbb”);
阿拉[0]=“aaa”;
阿拉[1]=“bbb”;
conn=DriverManager.getConnection(URL、用户、通行证);
oracle.jdbc.OracleConnection oraConn=(oracle.jdbc.OracleConnection)conn;
ArrayDescriptor des=ArrayDescriptor.createDescriptor(“数组_表”,oraConn);
//*****************
ARRAY ARRAY_to_pass1=新数组(des、conn、arrA);/*例外
CallableStatement cstm=(OracleCallableStatement)conn.prepareCall(“{call xyz.procedure1(?,)}”);
cstm.setArray(1,数组_到_pass1);
cstm.setInt(2,1);


这工作正常,但当我将listA而不是arrA传递给数组构造函数时..它会抛出sql异常。。我想传递Arraylist而不是string[]array

将列表转换为行前的数组

ARRAY array_to_pass1 = new ARRAY(des, conn, arrA );
在此之前,您可以从列表中添加/删除项目

String[] arrA= new String[listA.size()];
arrA= listA.toArray(arrA);

Oracle关于数组的文档不完整,我发现到处都是全通字符串[]数组

因此,我建议您将ArrayList更改为String[]数组,如下所示:

String[] arrA = listA.toArray(new String[listA.size()]);  
试试这个方法

List list = new ArrayList();
callableStatement = 
          (OracleCallableStatement)connection.prepareCall("{call yourprocedure(?)}");
            StructDescriptor structDescriptor = 
                StructDescriptor.createDescriptor("TYPE_ARRAY", 
                                                  connection);
            STRUCT[] structs = new STRUCT[list.size()];
            for (int i = 0; i < list.size(); ++i) {

                Yourclass str = 
                    (Yourclass)list.get(i);
                Object[] objects =

                    new Object[] { str.getProdId(), 
                                   str.getName()
                                 };
                STRUCT struct = 
                    new STRUCT(structDescriptor, connection, objects);
                structs[i] = struct;
            }
            ArrayDescriptor arrayDescriptor = 
                ArrayDescriptor.createDescriptor("ARRAY_MY", 
                                                 connection);

            ARRAY array = new ARRAY(arrayDescriptor, connection, structs);
            callableStatement.setArray(1, array);
            callableStatement.executeUpdate();
List List=new ArrayList();
callableStatement=
(OracleCallableStatement)connection.prepareCall({callYourProcedure(?)});
StructDescriptor结构描述符=
StructDescriptor.createDescriptor(“类型_数组”,
连接);
STRUCT[]structs=new STRUCT[list.size()];
对于(int i=0;i