- 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);
}
}
}