Hibernate, JTable, iReport e Office

8 respostas
BrunoAlencar

Pessoal, olá.

Bem, direto ao ponto.

Estou em TCC e preciso desenvolver um sistema em NetBeans, utilizando o Framework Hibernate, o iReport para meus relatórios, e preciso também carregar fichas em Excel.

Mas, estou tendo problemas para, através do HQL (SQL do Hibernate), fazer funcionar meu JTable. Tenho duas classes a parte já criadas, mas, ainda não funciona.

Em relação ao iReport, consegui integrá-lo ao NetBeans, mas, não consigo ligá-lo ao evento do ActionPerformed do menu de relatórios. Devido a instrução “throws Excpetion”, não consigo acionar o método para executar o relatório em jrxml.

Em relação ao Office, desconheço o passos para acionar o Word e Excel via NetBeans, para abrir a fichas que não farão parte do sistema. Por exemplo: Em Delphi, utilizamos a função WinExec, informando o endereço do executável do Word (Winword), juntamente com o endereço exato do arquivo que deve ser carregado. E em NetBeans, como ficaria?

Sem mais, aguardo resposta…
Antecipadamente, obrigado pela atenção.

8 Respostas

Sergio_Tupynamba

bom veio em relacao ao Ireport, to colocando um exemplo pra vc ae, nesse ex. eu chamo a classe RelatoriosCliente atraves de um botao…
tenta coloca o JRException ve se funciona…

this.getRelatorio().addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

try {

relatorioActionPerformed(evt);

} catch (JRException ex) {

ex.printStackTrace();

} catch (Exception ex) {

ex.printStackTrace();

}

}

});
public void relatorioActionPerformed(java.awt.event.ActionEvent evt) throws JRException, Exception{

try{

new RelatorioClientes().geraRelatorio();

} catch (HibernateException e) {

e.printStackTrace();

}

flw

BrunoAlencar

Sérgio…
Valeu grande… obrigado pela atenção.

Heim, queria te dizer que já consegui a solução.

Eu criei uma classe Relatorios, com os métodos para cada relatório que eu preciso. Simplesmente utilizei o try catch, e Exception ex mesmo.

Logo depois instanciei a classe, e chamei o método atraves do ActionPerformed normal da opção do menu. Já está zero bala.


Aproveitando a oportunidade, consegui encontrar a solução também para o Word e Excel.

Basta eu instanciar a classe Runtime.

ex: Runtime rt = Runtime.getRtuntime ();

rt.exec (Arquivos de programas/ Microsoft…/excel.exe C:/arquivo.xls);

É bem simples.

Agora, falta vencer a batalha do JTable que ainda está me tirando o sono. Sem mais… valeu…

Sergio_Tupynamba

ae Bruno explica melhor qual seu problema com JTable.

Tambem to fazendo um sistema p TCC e usando hibernate…
to terminando jah…soh falta fazer subrelatorios usando hibernate…
q tb tah me tirando o sono!!
se vc ou alguem me ajudar ficaria agradecido…
meu problema eh o seguinte…
tenho uma venda com o campos basicos da venda, do cliente e dos produtos vendidos, quero fazer um subrelatorios p listar os produtos vendidos mas ele naum mostra nem a pau…soh mostrar os dados
da Venda…essas sao as classes q eu to usando!!

public class RelatorioVenda {

public void geraRelatorio(List dados) throws JRException, Exception, HibernateException{

Map parameters = new HashMap();
    parameters.put("Title", "Relatorio de Vendas");
    HibernateQuery ds = new HibernateQuery(dados);
    
    JasperPrint jasperPrint = JasperFillManager.fillReport("venda.jasper", parameters, ds);
    
    JasperViewer viewer = new JasperViewer(jasperPrint, false);
    viewer.setVisible(true);
    
}

public HibernateQuery(List list) {

this.iterator = list.iterator();

}
public Object getFieldValue(JRField field) throws JRException {
            
    Object value = null;
    try {
        
        Method fld = currentValue.getClass().getMethod("get" + field.getName());
        value = fld.invoke(currentValue);
                
    }catch (IllegalAccessException iae) {
        iae.printStackTrace();
    } catch(InvocationTargetException ite) {
        ite.printStackTrace();
    }catch(NoSuchMethodException nsme) {
        nsme.printStackTrace();
    }
    return value;
}

public boolean next() throws JRException {
    currentValue = iterator.hasNext() ? iterator.next() : null;
    return (currentValue != null);
}

public class Venda {

//atributos normais
private Integer Codigo;    
private Integer NumeroNota;    
private Date DataVenda;    
private String Tipo;    
private String CondicaoPagamento;
private String Responsavel;    
private Double TotalValorDesconto;    
private Double ValorVenda;

//atributos relacionamento
private Cliente Cliente;    
private List<VendaProduto> VendaProdutos = new Vector<VendaProduto>();

valeu…

BrunoAlencar

Grande Sérgio…

Quanto ao JTable, quase que resolvi todo ao abacaxi.
Meu problema era entender a estrutura do JTable. Depois que entendi, agora já estou bem melhor. Eu so precisava abrir as tabelas.

Tenho no meu banco as tabelas de professor, disciplinas, turmas e alunos, como tabelas simples. Deles, já fiz tudo o que precisava.

Minha única questão agora, acredito que seja a mesma da sua…
Como consiliar uma consulta entre tabelas. Hé meu amigo, e aí que o bicho pega. Tenho que fazer uma consulta numa tabela propria, prof_turma, no caso. Se fizer essa, faço todas as outras.

Eu tentei colocar uma rotina dentro de outra, mas, não fui feliz. Consegui colocar o cabeçalho da tabela, mas, na hora de mostrar as linhas…

Cloquei essa estrutura:


public void exibirTurmasProf ()
     {
        Session sessao = HibernateUtility.getSession();
        Transaction transacao = sessao.beginTransaction();

        Query hql_prof = sessao.createQuery("from Professor");
        List lista_prof = hql_prof.list();
        Iterator iterator_prof = lista_prof.iterator();

        Query hql_turma = sessao.createQuery("from Turma");
        List lista_turma = hql_turma.list();
        Iterator iterator_turma = lista_turma.iterator();

        Query hql_tp = sessao.createQuery("from Turma_Prof");
        List lista_tp = hql_tp.list();
        Iterator iterator_tp = lista_tp.iterator ();

        cabecalhos = new Vector ();
        linhas = new Vector ();

        cabecalhos.add("Professor (a)");
        cabecalhos.add("Série");
        cabecalhos.add("Turma");

        while (iterator_prof.hasNext())
           {
              Professor prof = (Professor) iterator_prof.next();

              Integer id_prof = prof.getId();

              while (iterator_turma.hasNext())
                 {
                    Turma turma = (Turma) iterator_turma.next();

                    Integer id_turma = turma.getId();

                    while (iterator_tp.hasNext())
                       {
                          Turma_Prof tp = (Turma_Prof) iterator_tp.next();

                         Object tp_codturma = tp.getComposite_ID().getCodTurma();
                         Object tp_siape = tp.getComposite_ID().getSiape();

                         Vector v_tp = new Vector ();

                         if ((tp_siape.equals(id_prof)) && (tp_codturma.equals(id_turma)))
                            {
                               v_tp.add ("" + tp.getComposite_ID().getSiape().getNomeProf());
                               v_tp.add ("" + tp.getComposite_ID().getCodTurma().getSerieTurma());
                               v_tp.add ("" + tp.getComposite_ID().getCodTurma().getLetraTurma());

                               linhas.add(v_tp);
                            }
                       }
                 }
           }
     }

Compila numa boa, mas, não imprime.
Se tiver a solução…

Quero que imprima o vinculo entre professores e turmas, independente de repetir nome de professor.

Valeu !!!

BrunoAlencar

Sérgio, já consegui resulver.

Não preciso fazer rotinas dentro de rotinas, basta varrer a tabela propria com o Iterator, como fiz na última rotina.

Está tinindo agora. Mas, me surgiu outro problema, queria integrar Java, com hibernate e, em vez de PostgreSQL, usar HSQLDB.

Preciso fazer um teste. Estou há poucos dias da minha defesa, e preciso provar que não necessárias muitas mudanças para fazer funcionar. O fato, é que não estou conseguindo.

Valeu…

hvivox

O que vc esta desenvolvendo?

BrunoAlencar

Hvivox

É o seguinte grande. Fiz minha defesa de tcc e já estou formado. Bens a Deus.

Mas, meu sistema se chama SASE - Sistema Automatizado para Secretaria Escolar. Minha missão era integrar Java, Hibernate, PostGree e JasperResports através do iReport. Rodopiei para cara, para lá, e consegui.

Ainda tenho algumas idéias frescas na cabeça. Se precisar de algo, de um toque, ok?

Valeu!

BrunoAlencar

Ops… ja estou formado. Colei grau dia 14/12/06.

Criado 8 de outubro de 2006
Ultima resposta 28 de mai. de 2007
Respostas 8
Participantes 3