Как очистить кэшированный дескриптор структуры и загрузить его снова при создании структуры - PullRequest
0 голосов
/ 28 февраля 2019

С oracle 12c теперь класс oracle.sql.StructDescriptor устарел.Теперь вы можете напрямую создать структуру и связать ее с оператором, как показано ниже.

PreparedStatement ps= conn.prepareStatement("text_of_prepared_statement");
Struct mySTRUCT = conn.createStruct (...);
ps.setObject(1, mySTRUCT, Types.STRUCT);

Проблема заключается в том, что мы изменим структуру атрибутов базового типа записи оракула, связанного с этой структурой (например: Добавить новый атрибутудалить атрибут, изменить порядок атрибутов), дескриптор структуры, кэшированный в JDBC, становится устаревшим.Таким образом, выполнение закончится с SQLException.Это также упоминается в документации оракула здесь .

. Мне нужен способ перезагрузки дескриптора структуры, если он устарел, без использования устаревшего класса oracle.sql.StructDescriptor или сброса настроек.пул соединений.

Что я нашел до сих пор: мы можем использовать свойство Weblogic DataSource «Remove Infected Connections Enabled», чтобы отбросить физическое соединение, как упомянуто здесь .

Конфигурации: Weblogic 12c ojdbc7 jdk 1.8

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете вызвать следующее для удаления дескриптора из кэша.

((oracle.jdbc.internal.OracleConnection) conn) .removeDescriptor ("SQL_type_name");

...