2017-03-02 184 views
0

我使用jdbc來連接我的java程序和Oracle數據庫。 程序工作正常時,命中數據庫是低,但是當到數據庫的增加,我面臨着以下例外命中:Jdbc - 連接被拒絕異常

值java.sql.SQLException:IO異常:網絡適配器不能 建立connectionjava.sql.SQLException:關閉連接

附言:我已經關閉了連接中finally塊。

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

任何想法如何解決這個問題?

在此先感謝

+0

我想你是關閉它後嘗試使用連接。隨着新的聲明或只是想再次關閉 –

+0

把所有的代碼,請不要只是一個部分 –

+0

使用連接池 – CSK

回答

0

程序工作正常時,命中數據庫是低

看來你的應用程序試圖建立數據庫,但現有的連接數的連接等於數據庫允許使用SESSIONS的數量,因此數據庫拒絕建立更多連接。

要驗證你所看到的允許和當前會話細節號碼,甲骨文則可以使用下面的查詢相同:

數據庫被配置爲允許的會話數

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(); 
} 

這將有助於解釋您是否粘貼了完整的代碼。您也可以使用連接池,但如果您沒有正確關閉或重新使用它們,您將面臨同樣的問題。

相關問題