Relatório JasperReport - ResultSet to ArrayList - Como fazer?

Olá pessoal!
Preciso de uma ajuda para gerar um relatório com o jasper.
Eu estou fazendo um select no banco e o retorno preciso armazenar num arraylist para então gerar o relatório.
Mas não estou conseguindo fazer isso… Por favor, se alguém puder me dar uma dica. :lol: Segue o código:

public RequestDispatcher pesquisaDetalhado(String action) {
		
	    	    
		try {
			
			InitReport init = new InitReport(getServletContext().getRealPath("/config/web_app.properties"));

			String url = init.getUrl();
			String user = init.getUser();
			String pass = init.getPass();
			String driver = init.getDriver();			
			
			String dataInicio = request.getParameter("data_inicio");
		    String dataFinal = request.getParameter("data_final");
		    String loginPA = request.getParameter("login_pa");
		    String cpf = request.getParameter("cpf");
		    String tipo = request.getParameter("tipo");
		    		    
		    if (dataInicio.equals("") || dataInicio==null) {
		    	throw new ValidationException("Por favor, selecione uma Data Inicial para o Relatório!");
			}
		    
		    if (dataFinal.equals("") || dataFinal==null) {
		    	throw new ValidationException("Por favor, selecione uma Data Final para o Relatório!");
			}
		    
		    Connection conn = Connect.getConnection(url, user, pass, driver);			
		    Statement stm = conn.createStatement();
		    
			String sql = "SELECT * FROM AL_REL.TBR_PESQUISA "
					+ "WHERE data_hora BETWEEN '" + DataHora.dataDB(dataInicio)
					+ "' AND '" + DataHora.dataDB(dataFinal) + "'";
			
			  if (loginPA != null && !"".equals(loginPA))
			        sql = sql + " and login_pa = '" + loginPA + "'";
			  
			  if (cpf != null && !"".equals(cpf))
			        sql = sql + " and cpf = '" + cpf + "' order by data_hora";
			    else
			        sql = sql + " order by data_hora";
			
			 ResultSet rs = stm.executeQuery(sql);
			 
			while (rs.next()) {
				
				ArrayList<String[]> dadosPesquisaDetalhado = new ArrayList<String[]>();
				String[] dados = null;
				dadosPesquisaDetalhado.add(dados);
			
			}

		    
		    // Exporta relatório para PDF quando ação = pdf
		    if ("pdf".equals(tipo)) {				
				this.pesquisaDetalhadoPdf(rs_data_hora, rs_cpf, rs_login_pa, rs_resp1, rs_resp2);
			// Exporta relatório para XLS quando ação = xls
			} else if ("xls".equals(tipo)) {				
				this.pesquisaDetalhadoXls(rs, dataInicio, dataFinal, cpf, loginPA, sql);
			}
			else {
				System.out.println("Invalido: " + tipo);
			}
		    
		    rs.close();
		    stm.close();
		    
		} catch (Exception e) {
			request.setAttribute("error", "Erro: " + e.getMessage());
			return request.getRequestDispatcher("report/home.jsp");
		}
		return pesquisaDetalhado(action);
			
	}	


	private void pesquisaDetalhadoPdf(String rs_data_hora, String rs_cpf, String rs_login_pa, String rs_resp1, String rs_resp2) throws JRException, IOException {
		
		String path_background = getServletContext().getRealPath("/images/topo_retrato.jpg");
		
		/* HashMap de parametros utilizados no relatório. Sempre instanciados */
		HashMap<String, String> parameters = new HashMap<String, String>();
		//parameters.put("DATA_HORA", dataInicio);
		parameters.put("DATA_HORA", rs_data_hora);		
		parameters.put("CPF", rs_cpf);
		parameters.put("LOGIN_PA", rs_login_pa);
		parameters.put("RESP1", rs_resp1);
		parameters.put("RESP2", rs_resp2);
		//parameters.put("LOGO", logo);				
		parameters.put("BACKGROUND_TOPO", path_background);	
		
		// Define qual o template deve ser utilizado
		// recupera a pasta onde os arquivos de template estão
		// armazenados.
		InitReport init = new InitReport(getServletContext().getRealPath("/config/web_app.properties"));
		String templatePath = init.getTemplatePath();		
		
		InputStream stream = getServletContext().getResourceAsStream(templatePath + "/pesquisaDetalhado.jasper");
		
		// Define o tipo de retorno no browser
		response.setContentType("application/pdf");
		
		// Inicia a geração do relatório
		JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(dados);
		ServletOutputStream servletOutputStream = response.getOutputStream();
		JasperRunManager.runReportToPdfStream(stream, servletOutputStream, parameters, fonteDados);
		servletOutputStream.flush();
		servletOutputStream.close();			
				
	    
	}

http://java.sun.com/developer/Books/JDBCTutorial/

Só para constar que consegui o que eu queria criando um outro método para isso:

Segue o code:

	private ArrayList resultSetToArrayList(ResultSet rs) throws SQLException {

		ResultSetMetaData md = rs.getMetaData();
		int columns = md.getColumnCount();
		ArrayList results = new ArrayList();

		while (rs.next()) {

			HashMap row = new HashMap();

			results.add(row);

			for (int i = 1; i <= columns; i++) {

				row.put(md.getColumnName(i), rs.getObject(i));

			}

		}
		return results;

	}

Tks a lot! :slight_smile: