2016-03-31 6 views
0

Как типизировать java.sql.Connection для OracleConnecction, отличное от получения OracleConnection от метода разворота java.sql.Connection.Как typecasting Соединение с OracleConnection отличается от connection.unwrap (OracleConnection.class)

Кроме того, если я создаю OracleConnection через connection.unwrap (OracleConnection.class), тогда я должен закрыть OracleConnection в конце или java.sql.Connection в конце.

ответ

2

Разница несколько тонкая, но значимая.

Устранение неполадок с ClassCastException, если фактический объект реализации несовместим с объявленным классом. То есть если реализация не является OracleConnection, и вы пытаетесь ее вывести, вы получите исключение.

Использование unwrap(Class clazz) будет пытаться найти объект указанного типа и вернуть его, если с SQLException, если это невозможно. Преимущество использования методов интерфейса Wrapper заключается в том, что вы можете проверить заранее, если unwrap будет успешным, с помощью метода isWrapperFor.

+0

OK. Как насчет закрытия соединения. Соединение Oracle выполняется через разворот, тогда я должен закрыть исходное соединение или развёрнутое соединение oracleconnection. –

+1

Поскольку оригинальная оболочка все еще обертывает «OracleConnection», я думаю, вы захотите закрыть оригинал. То есть разверните, чтобы получить доступ к конкретным методам поставщика, но поместите оригинал в свой запрос try-with-resources. –

+1

@NitinGupta Unwrapping не «создает» соединение Oracle, он возвращает только уже существующий экземпляр. Закрытие этого развернутого экземпляра может быть плохой (рассмотрите объединенное соединение, которое позволяет разворачивать, закрытие развернутого соединения будет «плохо»). –