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文档.
使用工厂方法OracleConnection.createOracleArray直接创建java.sql.Array的实例.
使用java.sql.Struct接口进行声明,而不是使用具体的类oracle.sql.STRUCT.
使用工厂方法Connection.createStruct直接创建java.sql.Struct的实例.
以下是oracle API文档中提到的不推荐使用的类的完整列表.
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)