科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道关闭和释放 JDBC 资源

关闭和释放 JDBC 资源

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  关闭和释放 JDBC 资源      为了确保 JDBC 资源不在出现异常或错误等情况下被不正常关闭,我们应该在使用完 JDBC 资源之后关闭且释放它们

作者:中国IT实验室 来源:中国IT实验室 2007年9月9日

关键字: JDBC

  • 评论
  • 分享微博
  • 分享邮件

  关闭和释放 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.
  }
  
  
  

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章