当前位置:  技术问答>java相关

[转载]:最佳实践:关闭和释放 JDBC 资源

    来源: 互联网  发布时间:2015-06-03

    本文导语:  ★原文转载自Java版b-i-d的《最佳实践:关闭和释放 JDBC 资源》★ 摘要  为了确保 JDBC 资源不在出现异常或错误等情况下被不正常关闭,我们应该在使用完 JDBC 资源之后关闭且释放它们。JDBC 连接池提供了 JDBC ...

★原文转载自Java版b-i-d的《最佳实践:关闭和释放 JDBC 资源》★
摘要 

为了确保 JDBC 资源不在出现异常或错误等情况下被不正常关闭,我们应该在使用完 JDBC 资源之后关闭且释放它们。JDBC 连接池提供了 JDBC 连接定义和数目有限的连接,如果数量不够,就需要长时间的等待。不正常关闭 JDBC 连接会导致等待回收无效的 JDBC 连接。只有正常的关闭和释放 JDBC 连接,JDBC 资源才可以被快速的重用使性能得到改善。 

建议 

失败的关闭和释放 JDBC 连接可能导致其它用户的连接经历长时间的等待。虽然超时的JDBC 连接会被 WebSphere Application Server 退回而被回收 ,但必须等待这种情形发生。 

使用完 JDBC 资源后关闭它们,还可以显式关闭 JDBC ResultSets。如果没有显式关闭语句,则在完成了相关语句之后会释放 ResultsSets。 

所以请确保您构建的代码在所有情况下,甚至在异常和错误条件下,都能关闭和释放 JDBC 资源。以下代码显示了 JDBC 资源的获得和使用都封装在“Try-Catch-Finally”结构中。其中,在 finally 子句中处理 JDBC 资源的关闭,使所有情况下关闭都将发生。 

关闭 JDBC Connection 和 PreparedStatement 的正确方式  

Connection conn = null;  
ResultSet rs = null;  
PreparedStatement pss = null;  
try  
{  
        conn = dataSource.getConnection(USERID,PASSWORD); 
        pss = conn.prepareStatement("SELECT SAVESERIALZEDDATA  
            FROM SESSION.PINGSESSION3DATA WHERE SESSIONKEY = ?");  
        pss.setString(1,sessionKey);  
        rs = pss.executeQuery(); 
        pss.close();  
        conn.close();  
}  
catch (Throwable t)  
{  
        // Insert Appropriate Error Handling Here  
}  
finally  
{  
        // The finally clause is always executed - even in error  
        // conditions PreparedStatements and Connections will always be closed  
        try  
        {  
                  if (pss != null)  
                              pss.close();  
        }  
        catch(Exception e) {}  

        try  
        {  
                  if (conn != null)  
                              conn.close();  
        }  
        catch (Exception e){}  
        } 

替代方法 

以下代码显示了关闭 JDBC 资源的错误方法。它们将在异常情况中失去正常关闭方式。这里如果抛出异常,应用程序将无法关闭 JDBC 连接。 

Connection conn = null;  
ResultSet rs = null;  
PreparedStatement pss = null;  
try  
{  
         conn = dataSource.getConnection(USERID,PASSWORD); 
         pss = conn.prepareStatement("SELECT SAVESERIALZEDDATA  
            FROM SESSION.PINGSESSION3DATA WHERE SESSIONKEY = ?");  
         pss.setString(1,sessionKey);  
         rs = pss.executeQuery(); 
         pss.close();  
         conn.close();  
}  
catch (Throwable t)  
{  
          // If i reach this spot, I blew a JDBC Connection.  
}参考资料 

WebSphere Application Server Development Best Practices for Performance and Scalability  
作者 

Harvey W. Gunther 是位于美国北卡罗来纳州 Raleigh 的 IBM WebSphere 产品开发小组中的一名高级性能分析师。可以通过 hgunther@us.ibm.com 与 Harvey Gunther 联系。

|
g z

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • [NEWS][转载]三大Linux近期动向!
  • 转载:一个身先事足的1.4的失败者的自白
  • [转载]Linux基金会董事:不用Linux 你将被淘汰
  • 【转载】鲍尔默想战胜Google应讨教李彦宏
  • 转载未知大小的图片在一个已知大小容器中的水平和垂直居中(二)
  • Java狂想曲(转载)
  • 转载-FreeBSD 7.0 发布公告。
  • (转载)为 Linux 应用程序编写 DLL (二)
  • 在RH7.2中装上VIA的AC97的板载声卡 (转载)
  • 我的Redhat 7.3 Linux汉化/美化方法(转载)
  • [转载]linux常见问题
  • [转载]linux常见问题 iis7站长之家
  • 『分享』从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响!!! (转载)
  • 转载:On having layout


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3