[Java + Querry + iReport]

21 views
Skip to first unread message

gon...@gmail.com

unread,
Jul 20, 2018, 9:30:48 AM7/20/18
to JasperReports / iReport Brasil
Boa tarde galera, sou novo nisso e estou com dificuldades em receber dados de uma querry no java para montar o meu relatório no ireport.
O meu caso é o seguinte:

No java eu tenho uma querry onde tenho 2 select, no primeiro faço a busca de um cliente com alguns dados dele, e no segundo eu faço a busca do histórico de consumo dele (que eu vou imprimir em um gráfico depois).
Quando eu utilizo apenas um dos select meu relatório imprime normalmente, no entanto quando tento utilizar os 2 juntos não funciona.

Acho que o erro pode estar na hora em que eu pego os valores das colunas, mas eu não entendo como fazer diferente.

    public List<DistribuicaoAlimentador> getPontoInstalacao(String codInstalacao) {
       
ArrayList resultado = new ArrayList();
       
try {


           
Connection con = HibernateUtil.getConnection();
                       
String sqlQuery
                       
= "SELECT "
                         
+ "l.cod_alimentador, "
                         
+ "pn.nome_parceiro_negocio, "
                         
+ "pn.desc_endereco, "
                         
+ "pn.num_inscricao_estadual, "
                         
+ "i.cod_instalacao, "
                         
+ "i.cod_empresa, "
                         
+ "m.desc_municipio, "
                         
+ "b.desc_bairro, "
                         
+ "r.desc_rua, "
                         
+ "r.cod_cep, "
                         
+ "l.desc_morada as numero_casa, "
                         
+ "l.num_coordenada_x, "
                         
+ "l.num_coordenada_y, "
                         
+ "i.cod_grupo_tensao, "
                         
+ "i.cod_subgrupo_tensao, "
                         
+ "CAST(i.consumo_medio AS CHAR) AS consumo_medio, "
                         
+ "0 as qtd_prob_rede, "
                         
+ "0 as qtd_ressarcimento, "
                         
+ "i.cod_contrato, "
                         
+ "dt_inicio_contrato, "
                         
+ "dt_final_contrato, "
                         
+ "fc.descricao, "
                         
+ "CAST (i.ativa AS INT) AS ativa, "
                         
+ "l.cod_subestacao, "
                         
+ "un.desc_unidade_negocio, "
                         
+ "(SELECT "
                         
+ "COUNT(DISTINCT ins.cod_instalacao) "
                         
+ "FROM "
                               
+ "atc_instalacao ins "
                         
+ "INNER JOIN dwd_local_consumo lc ON lc.cod_local_consumo = ins.cod_local_consumo "
                         
+ "WHERE lc.cod_alimentador = l.cod_alimentador) "
                         
+ "AS qtd_instalacoes, "
                         
+ "CAST (i.baixa_renda AS INT) AS baixa_renda "
                         
+ ""
                         
+ "FROM "
                                 
+  "atc_instalacao i "
                           
+ "INNER JOIN dwd_instalacao ins ON ins.cod_instalacao = i.cod_instalacao "
                           
+ "INNER JOIN dwd_unidade_negocio un ON un.cod_unidade_negocio = i.cod_unidade_negocio "
                           
+ "INNER JOIN dwd_parceiro_negocio pn ON pn.cod_parceiro_negocio = i.cod_parceiro_negocio "
                           
+ "INNER JOIN atc_faixa_consumo fc ON fc.id = i.id_faixa_consumo "
                           
+ "INNER JOIN dwd_local_consumo l ON l.cod_local_consumo = i.cod_local_consumo "
                           
+ "INNER JOIN dwd_municipio m ON m.cod_municipio = i.cod_municipio "
                           
+ "INNER JOIN dwd_bairro b ON b.cod_bairro = i.cod_bairro AND b.cod_municipio = m.cod_municipio "
                           
+ "INNER JOIN dwd_rua r ON r.cod_rua = ins.cod_rua AND r.cod_bairro = b.cod_bairro AND r.cod_municipio = m.cod_municipio "
                   
+ "WHERE i.cod_instalacao = '"+codInstalacao +"'"
                           
+" SELECT "
                           
+"hc.dt_referencia "
                           
+"FROM "
                           
+"atc_instalacao ins "
                           
+"INNER JOIN dwf_historico_consumo hc ON hc.cod_instalacao = ins.cod_instalacao "
                           
+"WHERE hc.cod_instalacao = '"+codInstalacao + "'";
           
           
PreparedStatement sql = con.prepareStatement(sqlQuery);
            sql
.clearParameters();
           
ResultSet rs = sql.executeQuery();


           
while (rs.next()) {
                ali
.setCodAlimentador(rs.getString("cod_alimentador"));
                ali
.setCodInstalacao(rs.getString("cod_instalacao"));
                ali
.setCodEmpresa(rs.getString("cod_empresa"));
                ali
.setDescMunicipio(rs.getString("desc_municipio"));
                ali
.setDescBairro(rs.getString("desc_bairro"));
                ali
.setDescRua(rs.getString("desc_rua"));
                ali
.setCep(rs.getString("cod_cep"));
                ali
.setNumeroCasa(rs.getString("numero_casa"));
                ali
.setLat(rs.getString("num_coordenada_x"));
                ali
.setLon(rs.getString("num_coordenada_y"));
                ali
.setGrupoTensao(rs.getString("cod_grupo_tensao"));
                ali
.setSubGrupoTensao(rs.getString("cod_subgrupo_tensao"));
                ali
.setConsumoMedio(rs.getString("consumo_medio"));
                ali
.setQtdProbRede(rs.getInt("qtd_prob_rede"));
                ali
.setQtdRessarcimento(rs.getInt("qtd_ressarcimento"));
                ali
.setCodContrato(rs.getString("cod_contrato"));
                ali
.setInicioContrato(rs.getString("dt_inicio_contrato"));
                ali
.setFinalContrato(rs.getString("dt_final_contrato"));
                ali
.setNomePN(rs.getString("nome_parceiro_negocio"));
                ali
.setDescEnderecoPN(rs.getString("desc_endereco"));
                ali
.setNumInscricaoEstadual(rs.getString("num_inscricao_estadual"));
                ali
.setFaixaConsumo(rs.getString("descricao"));
                ali
.setAtiva(rs.getInt("ativa"));
                ali
.setBaixaRenda(rs.getInt("baixa_renda"));
                ali
.setSubestacao(rs.getString("cod_subestacao"));
                ali
.setCodEmpresa(rs.getString("cod_empresa"));
                ali
.setUnidadeNegocio(rs.getString("desc_unidade_negocio"));
                ali
.setQtdInstalacoes(rs.getInt("qtd_instalacoes"));
                ali
.setDataReferencia(rs.getString("dt_referencia"));
                           
                resultado
.add(ali);
               
           
}
            sql
.close();
            con
.close();
           
System.gc();
           
return resultado;

       
} catch (SQLException ex) {
           
Logger.getLogger(AtendimentoSumarizadoDAO.class.getName()).log(Level.SEVERE, null, ex);
           
return resultado;
       
}
   
}


Não sei se consegui ser muito claro, mas se eu alguém puder me ajudar nisso eu posso explicar melhor.

Denis - Gmail

unread,
Jul 20, 2018, 10:26:04 AM7/20/18
to jasperreports-...@googlegroups.com

Bom dia!


Confesso que fiquei abismado com esse codigo todo, meu amigo eu te recomendo usar um framework como Hibernate  para gerenciar essa parte. Mas voltando ao seu problema ja tentou exibir essa String no console pouco antes de passar para o relatorio? quando ela ja estaria efetivamente pronta a sua query ai voce mesmo podera verificar se o argumento esta sendo enviado ou não

--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

gon...@gmail.com

unread,
Jul 20, 2018, 11:41:21 AM7/20/18
to JasperReports / iReport Brasil
[mais tarde vou dar uma olhada sobre a dica do framework, vlw]

Mas eu verifiquei aqui o erro que eu tenho é:

java.sql.SQLException: Invalid column name dt_referencia.

Ele não encontra a coluna dt_referencia do segundo select, isso acontece antes mesmo de exibir a string no console, no caso eu imagino que seja porque com os 2 select a saída são 2 tabelas distintas, agora o que eu não sei é como referenciar essa coluna corretamente ou ainda se é permitido criar array dessa forma.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsub...@googlegroups.com.

Denis - Gmail

unread,
Jul 20, 2018, 3:29:09 PM7/20/18
to jasperreports-...@googlegroups.com

Então algo no seu SQL esta errado faz uma verificada minuciosa , nao é problema algum com o jasperreports

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.

gon...@gmail.com

unread,
Jul 20, 2018, 3:48:45 PM7/20/18
to JasperReports / iReport Brasil
Então, com relação a esse problema com a referência invalida, eu posso usar duas duas Strings e fica OK. 

                    + "WHERE i.cod_instalacao = '"+codInstalacao +"'";
            
            PreparedStatement sql = con.prepareStatement(sqlQuery);
            sql.clearParameters();
            ResultSet rs = sql.executeQuery();
            
            String sqlQuery2 
                        = "SELECT "                         
                            +"hc.dt_referencia "
                            +"FROM "
                            +"dwf_historico_consumo hc "
                            +"WHERE hc.cod_instalacao = '"+codInstalacao +"'";
            
            PreparedStatement sql2 = con.prepareStatement(sqlQuery2);
            sql2.clearParameters();
            ResultSet rs2 = sql2.executeQuery();

            DistribuicaoAlimentador ali = new DistribuicaoAlimentador();
                resultado.add(ali);
                

            }
            sql.close();
            con.close();
            System.gc();
            while (rs2.next()) {
                ali.setDataReferencia(rs2.getString("dt_referencia"));
                resultado.add(ali);
                System.out.println(resultado);
            }
            sql2.close();
            con.close();
            System.gc();
            return resultado;

        } catch (SQLException ex) {
            Logger.getLogger(AtendimentoSumarizadoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return resultado;
        }
    }

No entanto agora estou com problemas na hora de gerar o relatório, porque estou com duas listas de tamanhos diferentes, na hora que envio para o relatório só pega o primeiro valor da dt_referencia.

   public void gerarSolicitacaoPIDPDF() throws Throwable {
       
       DistribuicaoAlimentador pontoAlimentador = new DistribuicaoAlimentador();
       AtendimentoSumarizadoDAO dao = new AtendimentoSumarizadoDAO();
       
        try {
            
            pontoAlimentador = dao.getPontoInstalacao("00000001").get(0);
            
            
            arquivoRelatorio = "";
            if (mesSelecionado != null) {

                arquivoRelatorio = "relatorioSolicitacaoPID.jasper";

                Map parametros = new HashMap();
                parametros.put("COD_INSTALACAO", pontoAlimentador.getCodInstalacao());
                parametros.put("DISTANCIA_PONTOS", distance);
                parametros.put("LAT_INSTALACAO", pontoAlimentador.getLat());
                parametros.put("LON_INSTALACAO", pontoAlimentador.getLon());
                parametros.put("LAT_GOOGLE", "-22.4564");
                parametros.put("LON_GOOGLE", "44.5689");
                parametros.put("END_GOOGLE", endereco);
                parametros.put("COD_ALIMENTADOR", pontoAlimentador.getCodAlimentador());
                //dados da seção localização da instalação
                parametros.put("LOGRADOURO_INSTALACAO", pontoAlimentador.getDescRua());
                parametros.put("NUMERO_INSTALACAO", pontoAlimentador.getNumeroCasa());
                parametros.put("BAIRRO_INSTALACAO", pontoAlimentador.getDescBairro());
                parametros.put("MUNICIPIO_INSTALACAO", pontoAlimentador.getDescMunicipio());
                parametros.put("CEP_INSTALACAO", pontoAlimentador.getCep());
                parametros.put("END_INSTALACAO",  pontoAlimentador.getDescMunicipio() + " - " + pontoAlimentador.getCep());
                //dados da seção unidade consumidora
                parametros.put("ATIVA", pontoAlimentador.getAtiva());
                parametros.put("COD_CONTRATO", pontoAlimentador.getCodContrato());
                parametros.put("INICIO_CONTRATO", pontoAlimentador.getInicioContrato());
                parametros.put("FINAL_CONTRATO", pontoAlimentador.getFinalContrato());
                parametros.put("NOME_PN", pontoAlimentador.getNomePN());
                parametros.put("NUM_INSCRICAO_ESTADUAL", pontoAlimentador.getNumInscricaoEstadual());
                parametros.put("ENDERECO_PN", pontoAlimentador.getDescEnderecoPN());
                parametros.put("FAIXA_CONSUMO", pontoAlimentador.getFaixaConsumo());
                parametros.put("GRUPO_TENSAO", pontoAlimentador.getGrupoTensao());
                parametros.put("SUBGRUPO_TENSAO", pontoAlimentador.getSubGrupoTensao());
                parametros.put("BAIXA_RENDA", pontoAlimentador.getBaixaRenda());
                parametros.put("CONSUMO_MEDIO", pontoAlimentador.getConsumoMedio());
                //dados do gráfico da seção unidade consumidora
                parametros.put("DATA_REFERENCIA", pontoAlimentador2.getDataReferencia());
                //dados da seção alimentador
                parametros.put("SUBESTACAO", pontoAlimentador.getSubestacao());
                parametros.put("COD_EMPRESA", pontoAlimentador.getCodEmpresa());
                parametros.put("UNIDADE_NEGOCIO", pontoAlimentador.getUnidadeNegocio());
                parametros.put("QTD_INSTALACOES", pontoAlimentador.getQtdInstalacoes());
                parametros.put("COD_GRUPO_TENSAO", grupoTensao);
        
                gerar(parametros, "PDF", arquivoRelatorio);
                gravaLog(tipoLog, "Relatório de Resultado PDF extraído com sucesso");
            } else {
                UtilJSF.adicionaMensagemFacesContext("ControllerAtendimento", "O mês de referência é obrigatório na geração para PDF", "O mês de referência é obrigatório na geração para PDF", UtilJSF.info);
            }
        } catch (Throwable ex) {
            UtilJSF.adicionaMensagemFacesContext("ControllerAtendimento", "Não foi possível realizar a operação solicitada!", "Não foi possível realizar a operação solicitada!", UtilJSF.info);
            gravaLog(tipoLog, ex.getMessage());

        }
    }

 Existe alguma forma de eu enviar para o jasper dois parâmetros? já que eles são de tamanhos diferentes

Denis - Gmail

unread,
Jul 20, 2018, 3:58:21 PM7/20/18
to jasperreports-...@googlegroups.com

Boa Tarde


Meu amigo, vejo que esta passando por muitos problemas de estrutura é novo em programação ?  rs. Testou essa sua query no banco sem passar no codigo java ? . E o mais importante sim!

Existe uma forma de passar uma query dinamica para seu jasperreports sim! Mas pelo codigo nesse metodo voce esta passando um List mas essa Query é o seu problema vc precisa otimzar ela teste direto no banco antes de tentar passar para o codigo java.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.

Wellington Gonçalves

unread,
Jul 20, 2018, 4:02:57 PM7/20/18
to jasperreports-...@googlegroups.com
Ah, sou novo sim haha'.

Sim, no banco funciona OK, vou levar para casa esse problema e brincar mais com ele.

Se eu evoluir e/ou tiver mais dúvidas eu aviso aqui.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsubs...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsubs...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.
--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-ireport-brasil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/jasperreports-ireport-brasil/1CTL9ya_zAY/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para jasperreports-ireport-brasil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Wellington Gonçalves
about.me/wellingtongoncalves

Denis - Gmail

unread,
Jul 20, 2018, 4:05:16 PM7/20/18
to jasperreports-...@googlegroups.com

Vou add duas imagens de exemplos que tenho com parametro dinamico e parametros simples.




Varios Argumentos Simples

Jivago Silva

unread,
Jul 21, 2018, 9:43:50 AM7/21/18
to JasperReports / iReport Brasil
Já resolveu?

Vc poderia fazer uma outra classe recebendo os valores das outras duas q esta buscando os dados, esta outra classe seria apenas para preencher o relatorio

Denis Benjamim

unread,
Jul 22, 2018, 8:41:28 AM7/22/18
to jasperreports-...@googlegroups.com
O problema dele é o código SQL não a classe q fornece a lista mesmo usando javabeans ele precisa corrigir essa query que está causando o problema 

--
Reply all
Reply to author
Forward
0 new messages