java.sql.SQLException: Io 异常: Socket closed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.sql.SQLException: Io 异常: Socket closed相关的知识,希望对你有一定的参考价值。

Struts+Hibernate+Spring开发的,数据库是Oracle,服务器resin
500 Servlet Exception
java.sql.SQLException: Io 异常: Socket closed
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:511)
at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:941)
at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:531)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:2945)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:85)

我也遇到了 当点击一个可能查询加载慢的页面 连续点击几次后就socket关闭,然后出现返回空值等等问题,但是奇怪的是,过一段时间再刷新时,又正常了,再这样刷几次,又出同样的问题,
我是数据量有600W,查询sql慢使得页面加载慢,连续刷新就socket关闭,目前想到的就是让他不连续刷新那么快,完成一次连接后再去连接。
参考技术A Socket closed

套接字关闭啊... 是你连数据库的问题本回答被提问者采纳

java.sql.SQLException: Io 异常: Broken pipe 如何在不重启的情况下恢复?

【中文标题】java.sql.SQLException: Io 异常: Broken pipe 如何在不重启的情况下恢复?【英文标题】:java.sql.SQLException: Io exception: Broken pipe how to recover without restart? 【发布时间】:2012-04-03 16:51:05 【问题描述】:

在我的应用程序中,我使用与 Oracle 的连接,当连接丢失并尝试重新连接时,我收到异常:

java.sql.SQLException: Io exception: Broken pipe
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
    at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:540)
    at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:264)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196)

为了恢复我需要重新启动应用程序,是否可以在不重新启动的情况下恢复? 谢谢。

【问题讨论】:

【参考方案1】:

以下可能是导致异常的可能性:

    网络问题:即数据库和应用服务器之间的网络导致物理连接在一段时间后断开。这可能是由于网络后面运行的防火墙配置为在指定时间段后终止数据库连接。您可以考虑一种解决方法,只需重新配置应用程序服务器即可始终保持连接有效。对于 Tomcat,您可以尝试在 Tomcat 数据源配置文件 (context.xml) 中添加 validationQuery="select 'validationQuery' from dual

    正在重置与数据库服务器的连接,并且数据库驱动程序未通知客户端。在这种情况下,问题是 Oracle 驱动程序发现它以某种方式连接到 DBMS 的套接字(又是防火墙,也许?)已被另一端关闭。您可以考虑将连接超时(在池中)设置为短于网络/数据库服务器超时作为解决方案。

【讨论】:

"正在重置与数据库服务器的连接,并且数据库驱动程序未通知客户端。"那你怎么称呼异常?

以上是关于java.sql.SQLException: Io 异常: Socket closed的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:Io 异常:指定了未知主机

java.sql.SQLException: Io 异常: Socket closed

java.sql.SQLException: Io 异常: Broken pipe 如何在不重启的情况下恢复?

java.sql.SQLException: Io 异常: Socket read timed out

java.sql.SQLException:Io 异常:在与 oracle 的 JDBC 连接期间从读取调用中得到减一

java.sql.SQLException: Io 异常: Got minus one from a read call