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

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航