如何重用ArrayDescriptor?

时间:2018-01-19 07:56:54

标签: java arrays oracle database-connection

我尝试了以下代码:

public class Abc {

    private ArrayDescriptor arrayDesc;

    void init() {
       connection = //create connection
        arrayDesc = ArrayDescriptor.createDescriptor("DBTYPE",connection);
    }

    void m1() {
        conn1 = //create connection
        ARRAY array_to_pass1 = new ARRAY( arrayDesc , conn1, idsArray1 ); 
    }

    void m2() {
        conn2 = //create connection
        ARRAY array_to_pass2 = new ARRAY( arrayDesc , conn2, idsArray2 ); 
    }

}

此代码提供以下错误:

  

table.java.sql.SQLException:缺少描述符   在oracle.sql.DatumWithConnection.assertNotNull(DatumWithConnection.java:103)

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

ArrayDescriptor已弃用。假设您的connection个对象属于OracleConnection类型,请尝试使用createOracleArray - 类似这样的内容:

public class Abc {
    void init() {
        connection = //create connection
    }

    void m1() {
        conn1 = //create connection
        array array_to_pass1 = conn1.createOracleArray(arrayDesc, idsArray1); 
    }

    void m2() {
        conn2 = //create connection
        array array_to_pass2 = conn2.createOracleArray(arrayDesc, idsArray2); 
    }
}

注意:使用此方法,数组的类型为 java.sql.Array ,而不是oracle.sql.ARRAY

答案 1 :(得分:0)

必须使用使用相同连接的ArrayDescriptor调用

new ARRAY。所以你要做的事情是行不通的。请注意,每个连接都有一个描述符缓存,因此每个连接只创建一次描述符。