Извлечение данных из таблицы PL-SQL в качестве параметра OUT в Java - PullRequest
0 голосов
/ 29 сентября 2011

Я выполняю процедуру из кода Java, который имеет 2 выходных параметра, одним из которых является таблица объектов. вот обзор пакета

PROCEDURE SalesProc (
  p_S_table             IN t_s_table
, p_T_table             IN OUT t_t_table           
, x_message             OUT VARCHAR2                     

)

t_table - это параметр IN OUT, который содержит несколько строк и чисел. Перед выполнением пакета я создаю массив SalesObject и устанавливаю в него.

Здесь цель состоит в том, чтобы получить некоторое значение из t_table, используя resultSet.

источник, который я пытаюсь заставить работать:

 callstmt.registerOutParameter(2, Types.ARRAY,"T_TABLE");
 callstmt.setArray(2, mySalesObjectArray);
 callstmt.execute();
 java.sql.Array aa = callstmt.getArray(2);
 ResultSet rs = aa.getResultSet();

 while(rs.next()){
     String ss = rs.getString(1);
 }

Следующая строка дает "java.sql.exception"

  String ss = rs.getString(1);

Я также пытаюсь привести его к типу объекта следующим образом

 salesObject[] sArray = (salesObject[])callstmt.getArray(2);

Что выдает исключение classCastException. "classcastException.Cannot cast java.lang.Object[2][id=16062] to java.lang.String[]"


как мне избежать этих исключений?

1 Ответ

0 голосов
/ 28 ноября 2011

У вас есть 3 параметра, отсчет начинается с 1 с самого левого параметра:

  1. p_S_table
  2. p_T_table
  3. t_t_table

Я использую Oracle в качестве СУБД, но не использую параметры IN / OUT, но я уверен, что если вы измените свою процедуру на функцию (потому что функция возвращает что-то), которая принимает параметры IN и возвращает OUT, тот же код будет работать.

Что касается кастинга здесь:

salesObject[] sArray = (salesObject[])callstmt.getArray(2); 

ваш класс salesObject должен реализовывать либо ORAData, либо SQLData. SQLData кажется лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...