Как я могу предотвратить это исключение? java.sql.SQLException: не удалось преобразовать во внутреннее представление:

Мой код выдает указанное выше исключение в следующей строке (строка 2):

final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection());
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray());

Это дает мне следующее исключение:

java.sql.SQLException: Fail to convert to internal representation: 

myObjects представляет собой ArrayList следующего POJO:

public class MyObject
{
    private String name;
    private String surname;

    private int age;

    ...

    // Accessors etc..

}

T_PARAM_ARRAY в базе данных выглядит следующим образом:

create or replace
TYPE               T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1));

После некоторых исследований я считаю, что сопоставление типов данных между моим POJO и типом базы данных не совпадает правильно. Я достаточно уверен, что String соответствует VARCHAR2 в порядке, но я думаю, что есть проблема с преобразованием int в NUMBER.

Я пытался использовать BigDecimal, но это не улучшило ситуацию.

Какие-либо предложения?

EDIT: согласно документации Oracle: Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of type NUMBER. The values array contains an array of elements of type java.math.BigDecimal, because the SQL NUMBER datatype maps to Java BigDecimal by default, according to the Oracle JDBC drivers.


person Jimmy    schedule 24.11.2010    source источник


Ответы (1)


Я думаю, вам нужно создать массив самостоятельно, см. этот вопрос type-in-java">"Как вызвать хранимую процедуру оракула, которая включает пользовательский тип в java?" для рабочего примера.

person Vincent Malgrat    schedule 24.11.2010