2016-03-31 7 views
0

java.sql.ConnectionのunwrapメソッドからOracleConnectionを取得するのとは異なるOracleConnecctionへのjava.sql.Connectionのtypecastingはどのように行われますか。typecasting connectionとconnection.unwrap(OracleConnection.class)との違いは何ですか。

また、connection.unwrap(OracleConnection.class)を使用してOracleConnectionを作成している場合、finallyでOracleConnectionを閉じるか、finallyでjava.sql.Connectionを閉じる必要があります。

答えて

2

違いは多少微妙ですが意味があります。

実際の実装オブジェクトが宣言されたクラスと互換性がない場合、型キャストはClassCastExceptionで失敗します。私。実装がOracleConnectionではなく、タイプキャストしようとすると例外が発生します。

unwrap(Class clazz)を使用すると、指定された型のオブジェクトを見つけようとしますが、そうでない場合はSQLExceptionで失敗します。 Wrapperインターフェイスメソッドを使用する利点は、isWrapperForメソッドでunwrapが成功するかどうかを事前に確認できることです。

+0

OK。接続を閉じるとどうなりますか? Oracle接続はアンラップによって行われ、元の接続またはアンラップされたoracleconnectionをクローズする必要があります。 –

+1

元のOracleConnectionはまだOracleConnectionをラップしているため、元のものを閉じることができます。私。展開してベンダー固有のメソッドへのアクセスを取得しますが、元のリソースをtry-with-resourcesステートメントに入れてください。 –

+1

@NitinGuptaアンラッピングは、Oracle接続を「作成」せず、既存のインスタンスのみを返します。このアンラップされたインスタンスを閉じることは悪いことかもしれません。アンラップされた接続を閉じることは「悪い」ことになります。 –

関連する問題