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

9我用自己写的数据库连接池, 用在 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值