当前位置: 首页 > 知识库问答 >
问题:

java.sql.SQLException:连接关闭后不允许任何操作

董胡媚
2023-03-14

我已经构建了一个应用程序,使用会话维护。它使用JDBC

当应用程序部署在服务器(Apache Tomcat 6)上时。我可以登录和注销会话。工作完全正常。

现在,我让服务器继续运行24小时。现在,第二天我在输入凭据后尝试登录系统,单击登录按钮,我在网页上看到如下错误:(这是什么原因?)

Http状态500

例外

组织。阿帕奇。贾斯珀。JasperException:处理JSP页面/登录时发生异常。第11行的jsp

9:     Connection con =ConnectionProvider.getConnection();
10:     System.out.println("con "+con);
11:     con.setAutoCommit(false);
12:     Statement st = con.createStatement();
13:     ResultSet rs;
14:     rs = st.executeQuery("select * from ejduge_login where uname='" + userid + "' and pass='" + pwd +"'");


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

javax.servlet.ServletException: java.sql.SQLException: No operations allowed after connection closed.
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    org.apache.jsp.login_jsp._jspService(login_jsp.java:97)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

java.sql.SQLException: No operations allowed after connection closed.
    com.mysql.jdbc.Connection.checkClosed(Connection.java:2726)
    com.mysql.jdbc.Connection.setAutoCommit(Connection.java:498)
    org.apache.jsp.login_jsp._jspService(login_jsp.java:65)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

提前感谢!

共有3个答案

彭霄
2023-03-14

它现在可能工作正常,172800秒后会出错,您应该添加检查状态值并将值设置为小于172800。

就像c3p0 idleConnectionTest周期和maxIdleTime一样。

狄富
2023-03-14

如果连接处于非活动状态的时间过长(默认为34247052毫秒),mysql将隐式关闭连接。

这将导致连接关闭后不允许操作错误。因此,您可以增加非活动状态超时或通过高效的连池处理它

赫连永怡
2023-03-14

我发现,对于MYSQL,如果连接处于非活动状态的时间过长,那么关闭连接的默认时间是28800秒(8小时)(

show global variables;

在MYSQL中,我使用

set global wait_timeout=172800;

而且效果很好。

非常感谢您的帮助!

 类似资料:
  • 我尝试使用Flyway6.0.beta2BaseJavaMigration和Mysql 出于某种原因,我得到了一个错误 无法回滚事务java.sql.sqlnontransientConnectionException:连接关闭后不允许任何操作。 原因是什么

  • 问题内容: 我构建了一个应用程序,并在本地部署了……并且运行良好。我将其部署在远程服务器上,并开始获取主题行中提到的异常。这不是因为防火墙问题。 我更改了通过IP地址而不是本地主机进行连接的方式,现在我在本地部署的应用程序上获得了相同的超时。当我使应用程序运行超过一天时,出现此错误。 我自己提交事务或关闭会话之后,我不执行任何操作。我正在使用以下属性 引起原因:com.mysql.jdbc.exc

  • 我真的被这个问题困住了,所以我很高兴有人能帮我! 我用java创建了一个登录页面,并在其中创建了一个MYSQL连接。如果您第一次尝试登录,代码可以正常工作,但是在您注销并再次尝试登录之后,我得到了这个错误:com.mysql.jdbc.exceptions.jdbc4.mysqlnontransientconnectionException:连接关闭后不允许任何操作。 和DBManager

  • 我为我的webiste更改了主机公司,其中我使用mySQL db。我不时收到这个错误: 连接关闭后不允许进行任何操作。 我记得我第一次在旧服务器上运行我的站点时遇到了同样的问题,我用“配置修复”而不是“代码修复”修复了这个问题,但我不记得我做了什么:( 我在这里读了很多帖子,但每一篇都在谈论代码修复,我不认为这是我的情况 有人能帮我吗? 非常感谢。 编辑 我在我的旧环境中发现了这一点。xml文件;

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 我正在将MySQL与Java结合使用,试图制作shoppingcartDB,并试图删除从订购到现在已经过了30天的元组。 但是编译器说: 我如何解决这个问题? 代码: 抛出异常的代码行是: stmt。executeUpdate(“从篮子中删除,其中orderdate=““Odate”;”);