我使用jdbc
将我的java程序与Oracle
数据库连接起来。
当数据库的命中率很低时,程序运行正常,但是当数据库的命中率增加时,我面临以下异常:
java.sql.SQLException:Io异常:网络适配器不能 建立connectionjava.sql.SQLException:已关闭连接
P.s我已经在finally块中关闭了连接。
try{
con.close();
}catch(Exception ex){
System.out.println(ex);
}
知道如何解决此问题吗?
提前致谢
答案 0 :(得分:0)
当数据库的命中率很低时,程序运行正常
似乎您的应用程序尝试与数据库建立连接,但现有连接数等于数据库允许的SESSIONS
数,因此数据库拒绝建立进一步的连接。
要验证相同内容,您可以看到允许的和当前会话详细信息的数量,对于Oracle,您可以使用以下查询:
数据库配置为允许的会话数
SELECT name, value FROM v$parameter WHERE name = 'sessions'
当前有效的会话数
SELECT COUNT(*) FROM v$session
答案 1 :(得分:0)
我不确定您的工作流程,但此问题看起来像您尝试使用已关闭的连接的连接泄漏问题。每当你试图关闭你的连接时,将它放在finally块中。所以,如果发生异常,你不应该错过它。结束结果集,语句和连接的顺序应该是这样的。
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();
}
解释您是否粘贴了完整的代码会很有帮助。您也可以使用连接池,但如果您没有正确关闭或重复使用它们,您将面临同样的问题。