找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 数据库 查看内容

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

2009-12-14 18:39| 发布者: admin| 查看: 46| 评论: 0|原作者: 云忆

●我用自己写的数据库连接池,用在servl......


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

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 01:42 , Processed in 0.163617 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部