Conexão fecha no segundo método

5 respostas
V

Olá estou usando uma aplicação web com struts…que fica responsavel por recupera os dados de uma base SQL…O problema é o seguinte…eu uso o DAO com dos método que fazem pesquisas diferente mas usando a mesma base…A rotina funciona assim: primeiro acesso o método list()…até ai tudo bem, depois é a vez do listMan()…é ai o problema ele fecha conexão quando o ResultSet recebe o prepareStatement…

Não é erro na query…já testei…

segue a classe

Caso alguém possa dar uma dica:

public class ConsultaOSDAO extends DAO{

/**
 * Método Construtor
 *
 */
public ConsultaOSDAO(String conexao){
    super(conexao);
}

/**
 * 
 * @return Lista de Os
 */

public List list(String dataDe, String dataAte, String rota, String status) throws Exception{
    
     //Declara Objetos
    
    List lista = new ArrayList();
    List listaCTCs = new ArrayList();
    List listaManifestos = new ArrayList();
    StringBuffer sql = new StringBuffer();
    OrdemServicoDTO osDTO = null;
    ManifestoDTO manifesto = null;
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    HashMap manifestos = new HashMap();
    HashMap OSs = new HashMap();
    
    //Validando o status
    if(status.equalsIgnoreCase("todas")){
        status = " <> 'C' OR osMain.os_Baixado is null ";
    }else if(status.equalsIgnoreCase("S")){
        status =" = 'S' ";
    }else if(status.equalsIgnoreCase("null")){
        status = "is null";	
    }
    
    
    
    
    try{
        sql.append("SELECT	");
        sql.append("	os.os_id as os, ");
        sql.append("	osMain.os_saidaPortaria as  dataSaida, ");
        sql.append("	filial.nomeFilial as filial, ");
        sql.append("	man.filialmanifesto as manifesto, ");
        sql.append("	man.rotafilialdest as rotaId, ");
        sql.append("	man.descr_rotafilial as rota, ");
        sql.append("	man.idmobile as radio, ");
        sql.append("	man.placaveic as veiculo, ");
        sql.append("	man.motorista as  motorista, ");
        sql.append("	ctc.filialctc as ctc, ");
        sql.append("	ctc.remet_nome as remetente, ");
        sql.append("	ctc.dest_nome as destinatario, ");
        sql.append("	ctc.dest_cidade as cidade, ");
        sql.append("	ctc.dest_uf as uf, ");
        sql.append("	ctc.peso as peso, ");
        sql.append("	ctc.volumes as volumes, ");
        sql.append("	ctc.nfs as notas ");
        sql.append("FROM	");
        sql.append("	tb_os os, ");
        sql.append("	tb_osMain osMain, ");
        sql.append("	tb_manifesto man, "); 
        sql.append("	tb_ctc_esp ctc, ");
        sql.append("	tb_filial filial ");
        sql.append("WHERE	");
        sql.append("	man.filialmanifesto = os.os_nroperacao AND ");
        sql.append("	ctc.filialctc = man.filialctc AND ");
        sql.append("    filial.filial = os.os_FilialOrigem AND ");
        sql.append("    osMain.os_idmain = os.os_id AND ");
        sql.append("	osMain.os_saidaPortaria ");
        sql.append("BETWEEN	");
        sql.append("	? AND ");
        sql.append("	? AND");
        sql.append("	man.rotafilialdest = ? AND ");
        sql.append("	os_operacao = 'MAN' AND");
        sql.append("	man.motivo='LIN' AND");
        sql.append("	(osMain.os_Baixado  ");
        sql.append(""	+status+ ") ");
        sql.append("ORDER BY ");
        sql.append("	osMain.os_saidaPortaria desc  ");
//            sql.append(",	os.os_id des, “);

//            sql.append(”	man.filialmanifesto desc, “);

//            sql.append(”	ctc.filialctc desc");
connection = this.getConnection();
        preparedStatement = connection.prepareStatement(sql.toString());
        
        preparedStatement.setString(1, dataDe + " 00:00");
        preparedStatement.setString(2, dataAte + " 23:59");
        preparedStatement.setString(3, rota);
        
        
        resultSet = preparedStatement.executeQuery();
         
        
        while(resultSet.next()){


            CtcDTO ctcDTO = new CtcDTO();
                         
            ctcDTO.setManifesto(resultSet.getString("manifesto"));
            ctcDTO.setCtc(resultSet.getString("ctc"));
            ctcDTO.setDestinatario(resultSet.getString("destinatario"));
            ctcDTO.setCidade(resultSet.getString("cidade"));
            ctcDTO.setUf(resultSet.getString("uf"));
            ctcDTO.setVolumes(resultSet.getInt("volumes"));
            ctcDTO.setPeso(resultSet.getDouble("peso"));
            ctcDTO.setRemetente(resultSet.getString("remetente"));
            ctcDTO.setNotas(resultSet.getString("notas").trim().split("/")); 
             
            
            osDTO = (OrdemServicoDTO)OSs.get(resultSet.getString("os"));
            if(osDTO == null)
            {
                osDTO = new OrdemServicoDTO();
                osDTO.setOs(resultSet.getString("os"));
                osDTO.setVeiculo(resultSet.getString("veiculo"));
                osDTO.setMotorista(resultSet.getString("motorista"));
                osDTO.setDataSaida(resultSet.getTimestamp("dataSaida"));
                osDTO.setFilial(resultSet.getString("filial"));
                osDTO.setRota(resultSet.getString("rota"));
                OSs.put(resultSet.getString("os"), osDTO);
                listaManifestos = osDTO.getCtcs();
            }
            listaManifestos.add(ctcDTO);
            
        }
            
        
    }
    catch(SQLException ex){
        ex.printStackTrace();
    }
   finally {
    close(resultSet);
    close(preparedStatement);
    close(connection);
}
   
    lista = new ArrayList(OSs.values());
    return lista;
}

/**
 * Retorna uma lista de Manifestos a partir de uma OS especifica
 * @param os
 * @return
 */
public List listMan(int os) throws Exception {
    
    //Declara Objetos
    
    List lista = new ArrayList();
    List listaCTCs = new ArrayList();
    List listaManifestos = new ArrayList();
    StringBuffer sql = new StringBuffer();
    OrdemServicoDTO osDTO = null;
    ManifestoDTO manifesto = null;
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    HashMap manifestos = new HashMap();
    HashMap OSs = new HashMap();
    
    
    try{
        sql.append("SELECT	");
        sql.append("	os.os_id as os, ");
        sql.append("	osMain.os_saidaPortaria as  dataSaida, ");
        sql.append("	filial.nomeFilial as filial, ");
        sql.append("	man.filialmanifesto as manifesto, ");
        sql.append("	man.rotafilialdest as rotaId, ");
        sql.append("	man.descr_rotafilial as rota, ");
        sql.append("	man.idmobile as radio, ");
        sql.append("	man.placaveic as veiculo, ");
        sql.append("	man.motorista as  motorista, ");
        sql.append("	ctc.filialctc as ctc, ");
        sql.append("	ctc.remet_nome as remetente, ");
        sql.append("	ctc.dest_nome as destinatario, ");
        sql.append("	ctc.dest_cidade as cidade, ");
        sql.append("	ctc.dest_uf as uf, ");
        sql.append("	ctc.peso as peso, ");
        sql.append("	ctc.volumes as volumes, ");
        sql.append("	ctc.nfs as notas ");
        sql.append("FROM	");
        sql.append("	tb_os os, ");
        sql.append("	tb_osMain osMain, ");
        sql.append("	tb_manifesto man, "); 
        sql.append("	tb_ctc_esp ctc, ");
        sql.append("	tb_filial filial ");
        sql.append("WHERE	");
        sql.append("	man.filialmanifesto = os.os_nroperacao AND ");
        sql.append("	ctc.filialctc = man.filialctc AND ");
        sql.append("    filial.filial = os.os_FilialOrigem AND ");
        sql.append("    osMain.os_idmain = os.os_id AND ");
        sql.append("	os.os_id= ? ");
        //sql.append("ORDER BY ");    
       // sql.append("	man.filialmanifesto, ");
       // sql.append("	ctc.filialctc ");
        
        connection = this.getConnection();
        preparedStatement = connection.prepareStatement(sql.toString());
        
        preparedStatement.setInt(1, os);
        
        
        resultSet = preparedStatement.executeQuery();
         
        
        while(resultSet.next()){


            CtcDTO ctcDTO = new CtcDTO();
                         
            ctcDTO.setManifesto(resultSet.getString("manifesto"));
            ctcDTO.setCtc(resultSet.getString("ctc"));
            ctcDTO.setDestinatario(resultSet.getString("destinatario"));
            ctcDTO.setCidade(resultSet.getString("cidade"));
            ctcDTO.setUf(resultSet.getString("uf"));
            ctcDTO.setVolumes(resultSet.getInt("volumes"));
            ctcDTO.setPeso(resultSet.getDouble("peso"));
            ctcDTO.setRemetente(resultSet.getString("remetente"));
            ctcDTO.setNotas(resultSet.getString("notas").trim().split("/")); 
             
            
            osDTO = (OrdemServicoDTO)OSs.get(resultSet.getString("os"));
            if(osDTO == null)
            {
                osDTO = new OrdemServicoDTO();
                osDTO.setOs(resultSet.getString("os"));
                osDTO.setVeiculo(resultSet.getString("veiculo"));
                osDTO.setMotorista(resultSet.getString("motorista"));
                osDTO.setDataSaida(resultSet.getTimestamp("dataSaida"));
                osDTO.setFilial(resultSet.getString("filial"));
                osDTO.setRota(resultSet.getString("rota"));
                OSs.put(resultSet.getString("os"), osDTO);
                listaManifestos = osDTO.getCtcs();
            }
            listaManifestos.add(ctcDTO);
            
        }
            
        
    }
    catch(SQLException ex){
        ex.printStackTrace();
    }
   finally {
    close(resultSet);
    close(preparedStatement);
    close(connection);
}
   
    
    return lista;
}

}

5 Respostas

cv1

Posta o codigo do seu getConnection()?

PS: use tags [code ] e [/code ], fica bem mais bonito :wink:

V
public ConsultaOSDAO getInstanceConsultaDAO(){

return new ConsultaOSDAO(“java:comp/env/jdbc/teste);

}
kina

Se você fizer a listagem usando apenas uma instancia da classe DAO irá dar erro mesmo por causa disto:

finally {
close(resultSet);
close(preparedStatement);
close(connection);
}

Sendo que connection é criado quando você instacia a classe, ou seja, se fizeres isto:

DAO dao =  new DAO("conexão");
dao.listar1();
dao.listar2(); // aqui irá ocorrer erro, pois você fecha a conexão no primeiro

entendeu?

/* Editado!!! */

Alternativa para escapar deste erro sem ter que refazer o código:

DAO dao =  new DAO("conexão");
dao.listar1();
dao = new DAO("conexão");
dao.listar2();

falou

V

Mudei mas não funcionou…continua dando o mesmo erro: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.

a classe businnes que chama o DAO é essa abaixoe mudei o construtor do DAO para  public ConsultaOSDAO(){

super(java:comp/env/jdbc/intec);

}

public class ConsultaBusiness {
public List consulta(String dataDe, String dataAte, String rota, String status) throws Exception{

//Declaração de Objeto
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    SimpleDateFormat sqlDf = new SimpleDateFormat("yyyy-MM-dd");
    
    List listaOS = new ArrayList();
    
    
    //Convertendo a data para rodar na query
    dataDe = sqlDf.format(df.parse(dataDe));
    dataAte = sqlDf.format(df.parse(dataAte));
   
    try{
        ConsultaOSDAO osDAO = new ConsultaOSDAO();
        listaOS = osDAO.list(dataDe, dataAte, rota, status);
        
    } catch (Exception exception){
        exception.printStackTrace();
    }
    
    
    return listaOS;
}



/**
 * Recebe uma OS e busca todos os seus manifestos
 * @param os
 * @return
 */
public List manifesto(String os) throws Exception{
    
    List listMan = new ArrayList();
    
    try{
        //Convert para real tipo
        int osId = Integer.parseInt(os);
        ConsultaOSDAO dao = new ConsultaOSDAO();
        listMan = dao.listMan(osId); 
    } catch (SQLException exception){
        exception.printStackTrace();
    }
    
    return listMan;
}

}

pcalcado

Como disse o cv:

Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará
[color=red]IDENTADO[/color].

Criado 17 de junho de 2005
Ultima resposta 17 de jun. de 2005
Respostas 5
Participantes 4