Erro no método da Classe DAO(com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:)

  • Bom pessoal,
  • Eu criei uma classe DAO para realizar as operações no meu banco de dados mas quando eu executo um método primeiro e vou chamar outro no servlet ocorre o seguinte erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

Abaixo está o código referente ao servlet que eu estou usando e da classe DAO que eu criei. Se alguém puder me ajudar desde já agradeço!!!

Código do Servlet:

package br.com.monografia.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.monografia.bean.Pergunta;
import br.com.monografia.dao.*;

public class SistemaAvaliacaoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public SistemaAvaliacaoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    
    
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
    	String cmd= request.getParameter("cmd");
    	int cat_conv=Integer.parseInt(request.getParameter("categoria"));
    	cat_conv=cat_conv+1;
    	String categoria=Integer.toString(cat_conv);//converte de volta para uma String
    	
    	
    	InterfaceSistemaAvaliacaoDAO perguntasDAO;
    	Pergunta questao= new Pergunta();//Verificar se é necessário
    	
    	try
    	{
    		perguntasDAO=new SistemaAvaliacaoDAO();
    		RequestDispatcher rd=null;
    		
    		[b]perguntasDAO.getQuantCategorias();
   //Aqui eu chamo o método getQuantCategorias da classe DAO para me retornar a quantidade de elementos que há de uma tabela no banco[/b]
    		
    		
    		
    		
    		if(cmd.equals("exibir"))
    		{
    			System.out.println("Erro na linha do Servlet");
    			
    			List listaPerguntas= perguntasDAO.mostrar_perguntas(categoria);
 
    			[b]aqui eu chamo o segundo método mostrar_pergutas(String categoria), mas ele não é executado devido ao erro que ocorre e o erro é captudaro pelo try {}catch{} do método.[/b]
    			
    			request.setAttribute("listaPerguntas", listaPerguntas);
    			rd=request.getRequestDispatcher("/formQuestionarioPerg.jsp?quant=tam");
    			rd.forward(request,response);
    		}
    		else
    			if(cmd.equalsIgnoreCase("avancar"))
    			{
    				//chamar o método de uma classe que será responsável por receber as informações do formulário.
    				//Depois colocar um método para voltar para o formulário mas indo para a próxima seção de perguntas
    			}
    		
    		
    		//rd.forward(request,response);
    	}
    	catch(Exception e)
    	{
    		e.printStackTrace();
    		throw new ServletException(e);
    	}
    	
    	
    	
    }
    
    

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

Código da classe DAO:

package br.com.monografia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import br.com.monografia.bean.Pergunta;
import br.com.monografia.util.ConnectionSistemaAvaliacaoFactory;

public class SistemaAvaliacaoDAO implements InterfaceSistemaAvaliacaoDAO{

	private Connection conn;
	
	public SistemaAvaliacaoDAO()throws SistemaAvaliacaoDAOException
	{
		try
		{
			this.conn=ConnectionSistemaAvaliacaoFactory.getConnection();
		}
		catch(Exception e)
		{
			throw new SistemaAvaliacaoDAOException("Erro: "+e.getMessage());
		}
	}
	
	public List mostrar_perguntas(String cod_categoria)throws SistemaAvaliacaoDAOException
	{
		PreparedStatement ps=null;
		Connection conn=null;
		ResultSet rs=null;
		
		try
		{
			conn=this.conn;
	     ps=conn.prepareStatement("select * from pergunta where categoria=? order by numero");
			ps.setString(1,cod_categoria);//verificar se o valor 1 é o correspondente ou é o 2.
			
			
			rs=ps.executeQuery();
			
			List<Pergunta> list= new ArrayList<Pergunta>();
			
			while(rs.next())
			{
				String codigo=rs.getString(1);
				String categoria=rs.getString(2);
				String nome=rs.getString(3);
				String descricao=rs.getString(4);
				int peso=rs.getInt(5);
				String ocorrencia=rs.getString(6);
				String numero=rs.getString(7);
				
			list.add(new Pergunta(codigo,categoria,nome,descricao,peso,ocorrencia,numero));
			}
			return list;
		}
		catch(SQLException sqle)
		{
			throw new SistemaAvaliacaoDAOException(sqle);
			//Aqui é onde o erro é capturado!!! 

		}
		finally
		{
			ConnectionSistemaAvaliacaoFactory.closeConnection(conn,ps,rs);
		}
	}
	
	public void getQuantCategorias() throws SistemaAvaliacaoDAOException
	{
		
		PreparedStatement ps=null;
		Connection conn=null;
		ResultSet rs=null;
		Statement st=null;
		
		String quantidade="";
		
		try
		{
			conn=this.conn;
			//ps=conn.prepareStatement("select count(*) from categoria");
			st=conn.createStatement();
			rs=st.executeQuery("select count(*) from categoria");
			
		   if( rs.first())
		   {
			 
			  quantidade=rs.getString(1);	
			  System.out.println("Quantidade:"+quantidade);
			
		   }
			
			
		}
		catch(SQLException sqle)
		{
			throw new SistemaAvaliacaoDAOException("Erro: "+sqle.getMessage());
		}
		finally
		{
			ConnectionSistemaAvaliacaoFactory.closeConnection(conn,ps,rs);
		}
		
	}
}

Tenta isto

....
        Connection conn=null;  
        ResultSet rs=null;  
         this.conn=ConnectionSistemaAvaliacaoFactory.getConnection();  
  
        try  
        {  
....