Ajuda! - Como melhorar esse código

Pessoal, estou tendo problemas com o código abaixo.

Esse código faz consultas no banco conforme a escolha das opções no formulário e após monta no jsp o resultado. O problema é que nem sempre mostra os resultado por inteiro, ou seja chega na metade e para a montagem da tela. As vezes também dá erro de statement e fecha a conexão.

Alguém pode me dar um help com isso?

Desde já agradeço

Código de conexão e sql:

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.InitialContext;
import javax.sql.DataSource;

public class ConexaoUtil {
	private static Connection c;
	private static Statement st;
	private static DataSource ds;
	private static ResultSet rs;
	
	public ConexaoUtil(){
		
		abreConexao();
		
	}
	public void abreConexao(){
		try {
			InitialContext ctx = new InitialContext();
			//DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bdportal");
			DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bdteste");
			c = ds.getConnection();
			//System.out.println(c);
		//Class.forName("com.mysql.jdbc.Driver");         

		//c = DriverManager.getConnection("jdbc:mysql://localhost/agenda?zeroDateTimeBehavior=convertToNull","agenda","agenda"); 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public ResultSet executeConsulta(String sql) throws SQLException {

		    st = c.createStatement();
			rs = st.executeQuery(sql);
			return rs;
	}
	
	public int executeAtualizacao(String sql) throws SQLException {
		
		st = c.createStatement();
			int i = st.executeUpdate(sql);
			return i;
	}
	
	public void fechaConexao() {
		try {
			rs.close();
			st.close();
			c.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Servlet que recebe os parâmetros para a pesquisa e faz a apesquisa:

package servletsPortalAc;

import java.sql.Statement;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
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 util.*;


public class PesquisaSql extends HttpServlet {

	@SuppressWarnings("deprecation")
	protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, ParseException {

		response.setContentType("text/html;charset=ISO-8859-1");

		PrintWriter out = response.getWriter();
		
		//INICIA AS VARIÁVEIS PARA RECEBER OS VALORES
		
		String retorno = null;
		String bgcolorPrazo = null;
		String dataPreFormatada = null;
		String tdpPos = null;

		
		String dt_pesq = request.getParameter("dt_pesq");
		String dt_pesq1 = request.getParameter("dt_pesq1");
		String reu_pre = request.getParameter("reu_pre");
		String nbrPos = request.getParameter("pos");
		String nbrMe = request.getParameter("me");
		String antecipa = request.getParameter("antecipa");
		String emissor = request.getParameter("emissor");
		String status = request.getParameter("status");
		String projeto = request.getParameter("projeto");
		String tecnologia = request.getParameter("negocio");
		String tipo = (String) request.getParameter("tipo");
		String modoFalha = (String) request.getParameter("modo_falha");
		String motivo = (String) request.getParameter("motivo");

		//INICIA DATA DE HOJE
		String hoje = util.FormatadorDatas.data_hora(); 
		
		 if (dt_pesq==null && dt_pesq1==null && nbrPos==null && nbrMe==null && antecipa==null && emissor==null && status==null && projeto==null && tecnologia==null){
		    	//retorno = (String) request.getParameter("retorno");
			 retorno = (String) request.getSession().getAttribute("retornoSession");
		    	//retorno = (String) session.getValue("retornoSession");
		    	//out.println(retorno);
		    }	
		    else
		    {
		
		String dataFormPesq = null;
	    String dataFormPesq1 = null;
	    
	    if (!dt_pesq.equals("") && !dt_pesq1.equals("")){
	    Date data_pesq = new SimpleDateFormat("dd-MM-yyyy").parse(dt_pesq);   
		dataFormPesq = new SimpleDateFormat("yyyy-MM-dd").format(data_pesq);  
		
		Date data_pesq1 = new SimpleDateFormat("dd-MM-yyyy").parse(dt_pesq1);   
		dataFormPesq1 = new SimpleDateFormat("yyyy-MM-dd").format(data_pesq1);
	    }

	    // monta um array com as opções de pesquisa
	    List<String> lista = new ArrayList<String>();   
	    
	    if(dataFormPesq!=null && reu_pre==null)
		  	   lista.add("data>='"+dataFormPesq+"'");
		    if(dataFormPesq1!=null && reu_pre==null)
		  	   lista.add("data<='"+dataFormPesq1+"'");
		    if(dataFormPesq!=null && reu_pre!=null)
		   	   lista.add("data_pre>='"+dataFormPesq+"'");
		    if(dataFormPesq1!=null && reu_pre!=null)
		   	   lista.add("data_pre<='"+dataFormPesq1+"'");
		    if(!nbrPos.equals(""))
		 	   lista.add("pos = '"+nbrPos+"'");
		    if(!nbrMe.equals(""))
		  	   lista.add("me like '%"+nbrMe+"%'");
		    if(!antecipa.equals(""))
		  	   lista.add("antecipa = '"+antecipa+"'");
		    if(!emissor.equals(""))
		 	   lista.add("emissor = '"+emissor+"'");
		    if(!status.equals("Todos")&& !status.equals(""))
		    	   lista.add("status = '"+status+"'");
		    if(status.equals("Todos"))
		     	   lista.add("status != '-' and status!='' ");
		    if(!tecnologia.equals(""))
		   	   lista.add("negocio = '"+tecnologia+"'");
		    if(motivo.equals("Todos"))
		     	lista.add("motivo != '-' and motivo!='' ");
		    if(!motivo.equals("Todos") && !motivo.equals(""))
		         lista.add("motivo = '"+motivo+"'");
		    if(!tipo.equals(""))
		        lista.add("tipo = '"+tipo+"'");
		    
	  
	    StringBuilder sb = new StringBuilder();     
	    for(String s : lista){     
	       sb.append(" and ").append(s);     
	    }
	    retorno = sb.toString().replaceFirst("and", "");  
	    }
	    request.getSession().setAttribute("retornoSession", retorno);
	    
	    out.println(retorno);
	  //ABRE CONEXÃO COM O BANCO
		ConexaoUtil c = new ConexaoUtil();
		
	String totalRows = null;
	Integer limit = 50;
	    
	List<AcAta> listaConsulta = new ArrayList<AcAta>(); 
	List<AcAta> listaConsultaWf = new ArrayList<AcAta>(); 
	try{	
	    ResultSet rs_count = c.executeConsulta("SELECT COUNT(*) AS c FROM ac_ata where" +retorno+ "");
		rs_count.next();
		
	    totalRows = (rs_count.getString("c"));

			ResultSet rs_lista = c.executeConsulta("SELECT * FROM ac_ata where" +retorno+ " order by data LIMIT " + limit);
			
			while(rs_lista.next()){
				
			    	AcAta acAta = new AcAta();
			    	acAta.setNbrAc(rs_lista.getString("id_ata"));
			    	acAta.setDtCriacao(rs_lista.getDate("data"));
			    	acAta.setPos(rs_lista.getString("pos"));
			    	acAta.setMe(rs_lista.getString("me"));
			    	acAta.setAntecipaAta(rs_lista.getString("antecipa"));
			    	acAta.setAssuntoAta(rs_lista.getString("assunto"));
			    	acAta.setEmissorAta(rs_lista.getString("emissor"));
			    	acAta.setStatusAta(rs_lista.getString("status"));
			    	acAta.setNegocioAta(rs_lista.getString("negocio"));
			    	acAta.setProjetoAta(rs_lista.getString("projeto"));
			    	acAta.setTipoRet(rs_lista.getString("tipo_ret"));
			    	acAta.setTipoAta(rs_lista.getString("tipo"));
			    	acAta.setChaveAta(rs_lista.getString("chave"));
			    	acAta.setModoFalhaAta(rs_lista.getString("modo_falha"));
			    	acAta.setMotivoAta(rs_lista.getString("motivo"));
			    	acAta.setDataPre(rs_lista.getDate("data_pre"));
			    	
			    							
					if(acAta.getDataPre()==null){
					acAta.setBgcolorPrazo("class=rowpos");
					
					}
					if(acAta.getDataPre()!=null){
				    acAta.setDataPreFormatada(FormatadorDatas.formatoBrasil_sem_hora(acAta.getDataPre()));
				   
				    acAta.setFarolDataPre(FormatadorDatas.getDiferencaDiasPrazo(acAta.getDataPre()));
				    }
					if (acAta.getFarolDataPre() > 5){
						acAta.setBgcolorPrazo("bgcolor=#00FF00");
					}
					if (acAta.getFarolDataPre() <= 5 && acAta.getFarolDataPre() >= 1){
						acAta.setBgcolorPrazo("bgcolor=#FFFF00");
					}
					if (acAta.getFarolDataPre() <= 0){
						acAta.setBgcolorPrazo("bgcolor=#FF0000");
					}
				
				    
					    //inicio 2º try/catch consulta	
					    try{
					    	ResultSet rs_tdp = c.executeConsulta("SELECT * FROM tdp_ata where pos='"+acAta.getPos()+"' order by pos");
					    	if(rs_tdp.first()){
					    		tdpPos = "Sim";
					    	}
					    } catch (SQLException e1) {
					    	e1.printStackTrace();
					    }	
					  //fim 2º try/catch consulta	

					 //inicio 3º try/catch consulta
					 int total_com_emi = 0;
					 try{
						 ResultSet rs_emissor = c.executeConsulta("SELECT COUNT(*) AS com_emi FROM ac_historico where (id_ata = '"+acAta.getNbrAc()+"' and area='Emissor') order by area");
						 rs_emissor.next();

						 total_com_emi = Integer.parseInt(rs_emissor.getString("com_emi"));	

					 } catch (SQLException e3) {

						 e3.printStackTrace();
					 }
					 //fim 3º try/catch consulta

				 //inicio 4º try/catch consulta 
				 String en = null;
				 try{
					 ResultSet rs_en = null;
					 rs_en = c.executeConsulta("SELECT * FROM cqa where (en = '"+acAta.getMe()+"') order by en");
					 if(rs_en.first())
					 {

						 en = rs_en.getString("en");
						 //out.println(en);
					 } 
					 else {

						 en = "none";
					 }

				 } catch (SQLException e5) {
					 e5.printStackTrace();
				 } 
				 
				//fim 4º try/catch consulta

					  //inicio 5º try/catch consulta	
					  if (!en.equals("none")){
						  Date data_max = null;
						  String dataCqa = null;	  
						  try{	  
							  ResultSet rs_max = null;
							  rs_max = c.executeConsulta("SELECT max(prazo) as data_max FROM cqa_workflow where (en = '"+en+"') and prazo IS NOT NULL GROUP BY en ORDER BY max(prazo)ASC");
							  if(rs_max.first()){
								  data_max = rs_max.getDate("data_max");
							  }

						  } catch (SQLException e6) {
							  e6.printStackTrace();
						  }
					 
				//fim 5º try/catch consulta	 

					 //inicio 6º try/catch consulta	
					 String dataPreMaior = null;
					 try{
						 if (data_max!=null && !data_max.equals("")){
							 dataCqa = FormatadorDatas.formatoBrasil_sem_hora(data_max);

							 acAta.setFarolDataMax(FormatadorDatas.getDiferencaDiasPrazo(data_max));

							 //out.println(bgcolorPrazo); 
						 }

						 if(acAta.getDataPre()==null && data_max==null){

							 dataPreMaior = "-";
							 //out.println("1");
						 }

						 if(data_max==null){

							 dataPreMaior = dataPreFormatada;
							 //out.println("3");
						 }
						 if(acAta.getDataPre()==null){

							 dataPreMaior = dataCqa;

							 if (dataCqa==null){

								 dataPreMaior = "-";

							 }
							 //out.println("4");
						 }
						 if(acAta.getDataPre()!=null){
							 if(data_max.after(acAta.getDataPre())||data_max==null){

								 dataPreMaior = dataCqa;
								 //out.println("5");
							 }
							 else{
								 dataPreMaior = dataPreFormatada;
								 //out.println("6");
							 }
							 if (dataPreMaior==null){

								 dataPreMaior = "-";
								 //out.println("7");
							 }
						 }
					 } catch (Exception e8) {
						 e8.printStackTrace();

					 }
		     	  }
					  listaConsulta.add(acAta);
					
			}
		//}	
			 
			 for(AcAta resultado : listaConsulta){ 
					
										
				
		 ResultSet rs_areas = c.executeConsulta("SELECT * FROM ac_workflow where (id_ata = '"+resultado.getNbrAc()+"') order by id_wf asc");

					  while(rs_areas.next()){
						  
						  AcAta acAta = new AcAta();
						  acAta.setNbrAcWf(rs_areas.getString("id_ata"));
						  acAta.setAreaAc(rs_areas.getString("area"));
						  //out.println(rs_areas.getString("area"));
						  acAta.setStatusAc(rs_areas.getString("status"));

						  ResultSet rs_com = c.executeConsulta("SELECT COUNT(*) AS com FROM ac_historico where (id_ata = '"+resultado.getNbrAc()+"' and area='"+acAta.getAreaAc()+"') order by area");
						  rs_com.next();

						  acAta.setTotalComment(Integer.parseInt(rs_com.getString("com")));	  
						  listaConsultaWf.add(acAta);
						   
					  }	
			 }
			 for(AcAta resultadoWf : listaConsultaWf){ 
					
				//	out.println(resultadoWf.getAreaAc()+"<br/>");
					//out.println(resultadoWf.getStatusAc()+"<br/>");
			 }
	 } catch (SQLException e) {
		 //out.println("Data Nula ou não existe");
		 e.printStackTrace();
		 
	 }	
	 
	 c.fechaConexao();
			request.setAttribute("listaConsulta",listaConsulta);
			request.setAttribute("listaConsultaWf",listaConsultaWf);

			String nextJSP = "/ac/acPesquisa_sql.jsp?totalRows="+totalRows;
			RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
			dispatcher.forward(request,response);
 
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		try {
			processRequest(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		try {
			processRequest(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Post apenas a parte relevante do código.
1º - Chegou a travar meu browser.
2º - Não tem como ler tudo, é muita coisa.

Blz Fernando!

Tirei a parte dos getters and setters e a parte do jsp.

Cara, tô enrolado com isso… As vezes monta a tela direitinho com todos os resultados e as vezes tenho que ficar atualizando o browser para montar a tela por inteiro com todos os resultados.

Pode me dar um help