●我用自己写的数据库连接池,用在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. 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() |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.