2017-12-04 11 views
0

내가 그것을 예외에게 시간을 좀 자바 progarm를 통해에 접속을 시도하고 내가 그것을 다음주는 데이터베이스에 액세스하려고 할 때 그 여기 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException : 연결이 닫힌 후 작업이 허용되지 않습니다. 해결 방법은?

작업 몇 번 내 자바 코드

package com.iseva.Servlet; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import Connectionfactory.ConnectionFactory; 

/** 
* Servlet implementation class ValidateUser 
*/ 
@WebServlet("/ValidateUser") 
public class ValidateUser extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    Connection cn=null; 
    public void init() 
    { 

     cn=ConnectionFactory.getConnection(); 
     System.out.println("connection"); 
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 


     String logintype=request.getParameter("t1"); 
     String username= request.getParameter("t2"); 
     String password= request.getParameter("t3"); 
     PreparedStatement ps=null; 
     ResultSet rs=null; 
      String result=""; 
     try { 
      ps=cn.prepareStatement("select * from mydb.isevausers where logintype=? and passwords=? and username=?"); 
      ps.setString(1,logintype); 
      ps.setString(2,password); 
      ps.setString(3,username); 
      rs=ps.executeQuery(); 
      boolean b=rs.next(); 

      // RequestDispatcher dispatcher=null; 

      if(b==true) 
      { 
       /* response.sendRedirect("form_1_IRCTC_PaymentEntry.html");*/ 
       result="form1"; 
       /*dispatcher =getServletContext().getRequestDispatcher("/form_1_IRCTC_PaymentEntry.html"); 

       dispatcher.forward(request,response);*/ 

       System.out.println("entered"); 
      }   
      else{  
       result="notfound"; 
       System.out.println("not found");     
      } 
       response.getWriter().write(result); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     finally{ 
      if(cn!=null) 
      { 
       try { 
        cn.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      if(ps!=null) 
      { 
       try { 
        ps.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      if(rs!=null) 
      { 
       try { 
        rs.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

} 

때 내가 mysql database on aws이 예외

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
    at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1187) 
    at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1182) 
    at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4071) 
    at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4040) 
    at com.iseva.Servlet.ValidateUser.doGet(ValidateUser.java:44) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1519) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1475) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

이 문제를 해결하는 방법은 무엇입니까? database 또는 내 코드 문제입니다. 제발 도와주세요. 사이트에서 제안한대로 finally 블록의 모든 연결을 닫았습니다. 우리의 mysql 데이터베이스 idle 얼마 동안이 예외가 발생할 수 있습니다. 그렇지? 예인 경우 어떻게해야합니까? 또는 그것을 해결하는 방법. 난 당신이이 없기 때문에 오류가 발생합니다 그것을 처음 사용 후 어떤 다음 번에 호출 때문에 폐쇄 된 하나의 doGet()를 호출하여 연결 개체 후 서버를

java.lang.Object.wait(Native Method) 
java.lang.ref.ReferenceQueue.remove(Unknown Source) 
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64) 
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
java.lang.Thread.run(Unknown Source) 
Dec 04, 2017 3:34:01 PM org.apache.catalina.loader.WebappClassLoaderBase checkStateForResourceLoading 
INFO: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access. 
    at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1353) 
    at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1029) 
    at com.mysql.jdbc.AbandonedConnectionCleanupThread.checkContextClassLoaders(AbandonedConnectionCleanupThread.java:90) 
    at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:63) 
+0

연결이 때문에 데이터베이스 연결이 설정되어 있는지 확인하십시오 폐쇄됩니다 후 데이터베이스에 액세스하려고 ... [com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException의 –

+1

가능한 복제는 : 어떤 작업은 허용되지 않습니다 연결이 닫힌 후. (내 SQL PING을 사용하여 JDBC를 사용하는 방법)] (https://stackoverflow.com/questions/47569694/com-mysql-jdbc-exceptions-jdbc4-mysqlnontransientconnectionexception-no-operati) –

답변

0

를 새로 고칠 때

이 예외는 오는 열린 연결.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    //opening a connection before accessing db 
    cn=ConnectionFactory.getConnection(); 

    String logintype=request.getParameter("t1"); 
    String username= request.getParameter("t2"); 
    String password= request.getParameter("t3"); 
    PreparedStatement ps=null; 
    ResultSet rs=null; 
     String result=""; 
    try { 
     ps=cn.prepareStatement("select * from mydb.isevausers where logintype=? and passwords=? and username=?"); 
     ps.setString(1,logintype); 
     ps.setString(2,password); 
     ps.setString(3,username); 
     rs=ps.executeQuery(); 
     boolean b=rs.next(); 

     // RequestDispatcher dispatcher=null; 

     if(b==true) 
     { 
      /* response.sendRedirect("form_1_IRCTC_PaymentEntry.html");*/ 
      result="form1"; 
      /*dispatcher =getServletContext().getRequestDispatcher("/form_1_IRCTC_PaymentEntry.html"); 

      dispatcher.forward(request,response);*/ 

      System.out.println("entered"); 
     }   
     else{  
      result="notfound"; 
      System.out.println("not found");     
     } 
      response.getWriter().write(result); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    finally{ 
     if(cn!=null) 
     { 
      try { 
       cn.close(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if(ps!=null) 
     { 
      try { 
       ps.close(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if(rs!=null) 
     { 
      try { 
       rs.close(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

} 
+0

그래서 내가 닫으면 안된다. 연결? – raj

+0

@raj 답을 업데이트 했으므로 연결을 닫아야하지만 db 액세스하기 전에 열기를 기억해야합니다. –

+0

예 작업이 있지만 init() 메서드는 모든 요청에 ​​대해 실행되어 초기화 메서드 – raj