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