今天在项目中看到一段代码,



Connection conn = null; 



  ResultSet rs = null; 



  PreparedStatement pss = null; 



  try 



  { 



  conn = dataSource.getConnection(USERID,PASSWORD); 



); 



  rs = pss.executeQuery(); 



  pss.close(); 



  conn.close(); 



  } 



  catch (Throwable t) 



  { 



  // If i reach this spot, I blew a JDBC Connection. 



  } 觉得JDBC关闭方式不对,以前项目中就出现过tomcat老是因为连接池不够而崩溃的情况,其原因就是连接没有正常关闭,所以网上查了一下资料。



 



 



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



 



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



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



 



  关闭 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){} 



  } 



  } 



 



 



感觉上好象是只要把connection给关闭了,系统就能正常运行了。  那在查询或是其它操作中,如果只关闭Connection,不作ResultSet 和 Statement 的关闭的话,对系统性能是否会有影响呢。或者是其实方面的不良影响。



 常访问数据库。