#java #oracle #jdbc
#java #Oracle #jdbc
Вопрос:
Я выполняю процедуру из кода Java, которая имеет 2 параметра out, одним из которых является таблица объектов. вот обзор пакета
PROCEDURE SalesProc (
p_S_table IN t_s_table
, p_T_table IN OUT t_t_table
, x_message OUT VARCHAR2
)
t_table — это параметр 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. Вы получаете сообщение об ошибке? Каково определение T_TABLE? и т.д. и т.п. Вам нужно дать нам немного больше для работы.
2. «это не работает», пожалуйста, сообщите нам подробности. Inb каким образом это не работает? Опишите наблюдаемое поведение, включая сообщения об ошибках и т. Д. Если вы не предоставите подробную информацию, вы не получите ответа.
3. Не могли бы вы опубликовать структуру (предпочтительно синтаксис) базовой процедуры, пожалуйста?
4. Попробуйте выполнить приведение к
Object[]
:Object[] sArray = callstmt.getArray(2)
Ответ №1:
У вас есть 3 параметра, подсчет начинается с 1 с самого левого параметра:
- p_S_table
- p_T_table
- t_t_table
Я использую Oracle в качестве СУБД, но не использую параметры ввода / вывода, но я уверен, что если вы измените свою процедуру на функцию (потому что функция возвращает что-то), которая принимает входные параметры и возвращает выходные, будет работать тот же код.
Что касается приведения здесь:
salesObject[] sArray = (salesObject[])callstmt.getArray(2);
ваш salesObject
класс должен реализовать либо ORAData
или SQLData
.
SQLData
кажется лучше.