2017-03-02 159 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(); 
} 

这将有助于解释您是否粘贴了完整的代码。您也可以使用连接池,但如果您没有正确关闭或重新使用它们,您将面临同样的问题。