• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

当数据库重启后连接池没有自动识别的解决办法

发布: 2007-7-02 11:08 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网     我用自己写的数据库连接池, 用在 servlet 中.最近在日志中发现, 在数据库重启之后, 连接池未能正确判断, 导致所有的请求都不能被执行, 抛出类似以下异常.

java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:335)
 at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:503)
 at oracle.jdbc.driver.OracleConnection.privateCreateStatement(OracleConnection.java:683)
 at oracle.jdbc.driver.OracleConnection.createStatement(OracleConnection.java:560)

 在没有找到办法之后,我写了一个方法, 来判断连接是否正常. 


 /**
  * 判断连接是否正常工作
  * @param connection 数据库连接对象
  * @return
  * @throws SQLException
  */
 private boolean checkConnected(Connection connection)
   throws SQLException {
  // 连接为空或已经关闭
  if (connection == null || connection.isClosed()) {
   return (false);
  }
  boolean connected = false;
  Statement stat = null;
  try {
   stat = connection.createStatement();
   stat.close();
   connected = true;
  } catch (SQLException e) {
   
  } finally {
   try {
    if (stat != null) {
     stat.close();
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  return (connected);
 }

 在之前的连接池中, 只用了下面这句来判断.

connection == null || connection.isClosed()

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网