2017-03-02 18 views
0

jdbcを使用して、私のJavaプログラムとOracleデータベースを接続しています。 データベースへのヒットが低いときしかし、私は次の例外が直面していたデータベースの増加へのヒットプログラムは、正常に動作している:Jdbc - 接続が拒否された例外

ます。java.sql.SQLException:IO例外:ネットワークアダプタができませんでした閉じた接続finallyブロック内

Psの私が閉じている接続: connectionjava.sql.SQLExceptionを確立します。

try{ 
    con.close(); 
    }catch(Exception ex){ 
     System.out.println(ex); 
} 

どのようにすればこの問題を解決できますか?事前に

おかげ

+0

私はあなたがそれを閉じた後に接続を使用しようとしていると思います。新しい声明で、またはそれをもう一度閉じることを試みる –

+0

すべてのコードを入れてください。 –

+0

接続プールを使用してください – CSK

答えて

0

データベースへのヒットが

低い場合、プログラムが正常に動作しているアプリケーションがデータベースとの接続を確立しようとするようだが、既存の接続の数が等しいですデータベースと一緒に許可された SESSIONSの番号は、データベースがさらなる接続を確立するのを拒否します。

あなたは、クエリの下に使用できるOracleのためにあなたは、許可され、現在のセッションの詳細の数を見ることができると同じかどうかを確認するには

データベースを許可するように設定されたセッションの数を

SELECT name, value FROM v$parameter WHERE name = 'sessions' 

現在アクティブなセッション数

SELECT COUNT(*) FROM v$session 
+0

しかし、私は接続を閉じていますが、何の影響もありませんか? – abhi

+0

メソッドを実行している複数のスレッドがそれぞれトランザクションを実行しており、 'close()'操作まで到達しない場合はどうなりますか? – Arpit

+0

while(resultset.next){}の後に接続を終了するようになりました。 – abhi

0

あなたのワークフローについてはわかりませんが、この問題は次のようになります閉じた接続を使用しようとしているところで接続リークの問題が発生します。接続を閉じようとするときはいつでも、それを最終的にブロックに入れます。だから、例外の場合にそれを見逃すべきではない。結果セット、ステートメント、および接続を閉じる順序は、次のようにする必要があります。

try 
{ 
//open connection 
//execute statement 
//get resultset 
//process resultset 
} 
catch(Exception e) 
{ 
//Catch exception(using Exception just for example). It is a good programming practice to catch/throw specific exceptions instead of specifying super class Exception. 
} 
finally 
{ 
rs.close(); 
stmt.close(); 
conn.close(); 
} 

完全なコードを貼り付けたかどうかを説明すると役に立ちます。接続プールを使用することもできますが、接続プールを適切に閉じたり再利用したりしないと、同じ問題が発生します。

関連する問題