2015-10-26 3 views
4

Я использую приведенный ниже код JDBC для вызова хранимой процедуры Oracle, которая принимает вход Array.Как исправить устаревший oracle.sql.ArrayDescriptor, oracle.sql.STRUCT и oracle.sql.StructDescriptor

Но нижеследующие три класса устарели. Как это заменить?

import oracle.sql.ArrayDescriptor; 
import oracle.sql.STRUCT; 
import oracle.sql.StructDescriptor; 

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(); 

ответ

7

Из документации оракул API.

ArrayDescriptor

метод использования завод OracleConnection.createOracleArray для создания экземпляра java.sql.Array непосредственно.

STRUCT

Использовать интерфейс java.sql.Struct для декларации вместо того, чтобы использовать бетон класса oracle.sql.STRUCT.

StructDescriptor

метод использования завод Connection.createStruct для создания экземпляра java.sql.Struct непосредственно.

Вот полный список Deprecated Classes, упомянутый в документации API oracle.

+1

Хорошо, это мило - так, как я должен получить экземпляр 'OracleConnection', когда я работаю против' DataSource' экземпляра, которые могут или не могут делать различные фантазии прокси/упаковка трюки? – demaniak

4

Спасибо 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();