如何修复已弃用的oracle.sql.ArrayDescriptor,oracle.sql.STRUCT和oracle.sql.StructDescriptor

Jay*_*Jay 7 java oracle stored-procedures deprecated

我使用下面的JDBC代码来调用一个带有Array输入的Oracle存储过程.

但是以下三个类已被弃用.如何更换?

import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
Run Code Online (Sandbox Code Playgroud)

Java代码

        Object[] reportArray = new Object[3]; 
        STRUCT[] struct = new STRUCT[reports.size()];

        ArrayDescriptor arrayDescriptor = new ArrayDescriptor(new SQLName("T_REPORT_TABLE", (OracleConnection) connection), connection);
        StructDescriptor structDescriptor = StructDescriptor.createDescriptor("R_REPORT_OBJECT", connection);

        int arrayIndex = 0;
        for (Report data : reports) {
            reportArray[0] = data.getXXX();
            reportArray[1] = data.getYYY();
            reportArray[2] = data.getZZZ();

            struct[arrayIndex++] = new STRUCT(structDescriptor, connection, reportArray);
        }

        oracle.sql.ARRAY reportsArray = new oracle.sql.ARRAY(arrayDescriptor, connection, struct);
        callableStatement.setArray("T_REPORT_IN", reportsArray);

        callableStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

Bac*_*ria 11

来自oracle API文档.

ArrayDescriptor

使用工厂方法OracleConnection.createOracleArray直接创建java.sql.Array的实例.

STRUCT

使用java.sql.Struct接口进行声明,而不是使用具体的类oracle.sql.STRUCT.

StructDescriptor

使用工厂方法Connection.createStruct直接创建java.sql.Struct的实例.

以下是oracle API文档中提到的不推荐使用的类的完整列表.

  • 好的,这很可爱 - 那么当我处理一个可能会或可能不会做各种花哨的代理/包装技巧的`DataSource`实例时,我应该如何获得`OracleConnection`的实例? (2认同)

Jay*_*Jay 11

感谢UUIUI,我现在删除了已弃用的类,如果有人以后需要,修复后的代码如下所示.

    Object[] reportArray = new Object[3]; 
    Struct[] struct = new Struct[reports.size()];

    int arrayIndex = 0;
    for (Report data : reports) {
        reportArray[0] = data.getXXX();
        reportArray[1] = data.getYYY();
        reportArray[2] = data.getZZZ();

        struct[arrayIndex++] = connection.createStruct("R_REPORT_OBJECT", reportArray);
    }

    Array reportsArray = ((OracleConnection) connection).createOracleArray("T_REPORT_TABLE", struct);
    callableStatement.setArray("T_REPORT_IN", reportsArray);

    callableStatement.executeUpdate();          
Run Code Online (Sandbox Code Playgroud)

  • 好的,但是如果您使用连接池,则不能仅键入强制转换连接。那么你必须使用 unwrap 方法。请参阅/sf/answers/1083853781/ (2认同)