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