java.sql.SQLException : No operations allowed after connection closed 异常

标签 java mysql jsp jdbc

我已经构建了一个应用程序,通过 session 进行维护。 它使用 JDBC 和 mysql。

当应用程序部署在服务器 (Apache Tomcat 6) 上时。我可以登录和注销 session 。工作得很好。

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

HTTP 状态 500

异常

org.apache.jasper.JasperException: 在第 11 行处理 JSP 页面/login.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)

提前致谢!

最佳答案

我发现,对于 MYSQL (而不是 34,247,052 毫秒),如果它处于非 Activity 状态太久,则关闭连接的默认时间是 28800 秒(8 小时)。

show global variables;

在 MYSQL 中,我将该值重置为 172800 秒(根据我的要求为 48 小时)

set global wait_timeout=172800;

而且效果很好。

非常感谢您的帮助!

关于java.sql.SQLException : No operations allowed after connection closed 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883403/

相关文章:

用于唯一对象实例的 Java Map?

java - 二级缓存中缓存了什么?

java - 如何使用java运行mysql存储过程

android - 在Android中检索两个不同日期之间的记录

php - 如何计算从数据库表中检索到的包含 PHP 中特定值的逗号分隔数组

jsp - 重定向调用在 servlet 中不起作用

java - 用逗号分隔的 @PathVariables 映射的 Rest 端点

mysql - SQL (MySQL) 查询以提取多个时间范围内的聚合

java jsp显示数据库中的数据

java - Spring MVC - noHandlerFound/PageNotFound