ConnectionLoggingProxy.wrap (conn) вызывает «Исключение SQLException: поток уже закрыт» в Oracle

#java #oracle #jdbc

#java #Oracle #jdbc

Вопрос:

при выполнении следующего запроса с использованием jdbc:

 SELECT partition_name, high_value
FROM user_tab_partitions
WHERE table_name = 'SOME_TABLE_WITH_PARTITIONS';
 

Попытка выполнить следующее (на Java):

 rs.getString("high_value");
 

Выдал следующую ошибку:

 java.sql.SQLException: Stream has already been closed
    at oracle.jdbc.driver.LongAccessor.getBytesInternal(LongAccessor.java:127)
    at oracle.jdbc.driver.Accessor.getBytes(Accessor.java:926)
    at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:154)
    at oracle.jdbc.driver.GeneratedStatement.getString(GeneratedStatement.java:287)
    at oracle.jdbc.driver.GeneratedScrollableResultSet.getString(GeneratedScrollableResultSet.java:374)
    at oracle.jdbc.driver.GeneratedResultSet.getString(GeneratedResultSet.java:594)
    at com.zaxxer.hikari.pool.HikariProxyResultSet.getString(HikariProxyResultSet.java)
    at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jdbcdslog.ResultSetLoggingHandler.invoke(ResultSetLoggingHandler.java:19)
    at com.sun.proxy.$Proxy22.getString(Unknown Source)
    at mypackage.MyClass.extractHighValue(MyClass.java:46)
 

* Обратите внимание, что этот вопрос не связан с запросом устаревших LONG типов.

Комментарии:

1. Какую версию Oracle вы используете и какова версия драйвера Oracle JDBC?

Ответ №1:

По-видимому, мы использовали оболочку для соединения для регистрации запросов с именем (jdbcdslog):

 ConnectionLoggingProxy.wrap(conn)
 

Как только я удалил оболочку, все заработало, хотя я до сих пор не знаю, почему jdbcdslog возникла эта проблема. Плохое отражение? Возможно, интеграция с hikaryCP ?