[RESOLVIDO] Duvida em Encapsulamento e Relatório no ireport

5 respostas
gustavogoncalves

Ola pessoal,

estou com uma dúvida no meu programa que é o seguinte, eu tenho 2 classes, a classe jifRelAlunos e a classe relAlunos, na classe jifRelAlunos, eu tenho uma tabela que mostra as informações que estão armazenadas no banco de dados. Tenho opção de filtrar determinados resultados, e tenho 1 botão que gera Relatório. Quando clico neste botão, ele chama a classe relAlunos e faz todo o procedimento. Entretanto, gostaria de deixar o meu relatório personalizado, e imaginei que poderia fazer isto através de Encapsulamento (métodos set e get), só que a instrução sql não chega na classe relAlunos, exceto se for a instrução sql que criou na 1° vez a Tabela que está na classe jifRelAlunos.
Detalhe interessante, é que na classe jifRelAlunos eu insiro as informações que estão no Banco de Dados em uma tabela, entretanto, se eu tirar esta inicialização, também não consigo fazer com que a instrução sql vá para a classe relAlunos. Se eu estou setando as informações nos metodos set and get, porque justamente esta informação não é recebida pelos métodos?
Vou postar os meus códigos para melhor compreensão:

Classe jifRelAlunos:

package clocktime;

import java.sql.ResultSet;

public class jifRelAlunos extends javax.swing.JInternalFrame {

    String sql;

    /** Creates new form jifRelAlunos */
    public jifRelAlunos() {

        initComponents();
        S = new selectDados();
        U = new updateDados();
        //MEU PROBLEMA TA AQUI Ó!
        initTabela();
    }

    private void initTabela(){
        try {
        //MEU PROBLEMA TA AQUI Ó!
            sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod";
            rs = S.preencheDataSet(sql);
            setSql(sql);
            jTable1.setModel(new ResultSetTableModel(rs));
            resizeColumns();

        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

 private void jbPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                            
      String nome = jtfNome.getText().trim();

//    String ordenacao = "order by";
        try {
            if (jchbNome.isSelected()) {
                sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod and r.nome like '" + nome + "%' order by r.nome asc";
                rs = S.preencheDataSet(sql);
                setSql(sql);
                jTable1.setModel(new ResultSetTableModel(rs));
                jTable1.updateUI();
                resizeColumns();
            }
            if (jchbCurso.isSelected()) {
                if (jchbCursoXP.isSelected()) {
                    sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod order by curso_xp desc, r.cod asc";
                    rs = S.preencheDataSet(sql);
                    setSql(sql);
                    jTable1.setModel(new ResultSetTableModel(rs));
                    jTable1.updateUI();
                    resizeColumns();
                }
                if (jchbWord.isSelected()) {
                    sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod order by curso_word desc, r.cod asc";
                    rs = S.preencheDataSet(sql);
                    setSql(sql);
                    jTable1.setModel(new ResultSetTableModel(rs));
                    jTable1.updateUI();
                    resizeColumns();
                }
                if (jchbExcel.isSelected()) {
                    sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod order by curso_excel desc, r.cod asc";
                    rs = S.preencheDataSet(sql);
                    setSql(sql);
                    jTable1.setModel(new ResultSetTableModel(rs));
                    jTable1.updateUI();
                    resizeColumns();
                }
                if (jchbPoint.isSelected()) {
                    sql = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno, r.numero as numero_aluno, r.complemento as complemento_aluno, r.bairro as bairro_aluno, r.cidade as cidade_aluno, r.uf as uf_aluno, r.rg as rg_aluno, r.cpf as cpf_aluno, r.sexo as sexo_aluno, r.telefone as telefone_aluno, r.celular as celular_aluno, r.periodo as periodo_aluno, r.curso_xp as curso_xp_aluno, r.curso_word as curso_word_aluno, r.curso_excel as curso_excel_aluno, r.curso_point as curso_point_aluno, r.idade  as idade_aluno, u.cod as cod_uf, u.uf as nome_uf FROM reg_alunos r inner join reg_uf u on r.uf = u.cod order by curso_point desc, r.cod asc";
                    rs = S.preencheDataSet(sql);
                    setSql(sql);
                    jTable1.setModel(new ResultSetTableModel(rs));
                    jTable1.updateUI();
                    resizeColumns();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }        

//Seta informação do sql
    public void setSql(String sql) {
        this.sql = sql;
        System.out.println(sql);
    }
    //Retorna informação do sql
    public String getSql() {
        return sql;
    }

private void jbGerarRelatorioActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        relAlunos rel = new relAlunos();
        String query = getSql();
        //System.out.println(query);
        try {
            rel.geraRelatorio(query);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

Classe relAlunos:

package clocktime;

import java.sql.*;
import java.util.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;

public class relAlunos {

    private static final String diretorio = "C:\\Sistema\\reports\\";
    private static final String relatorio = diretorio + "rel_alunos.jasper";
    private static final String print = diretorio + "rel_alunos.jprint";
    private static final String pdf = diretorio + "rel_alunos.pdf";


    private static Connection getConnection() throws ClassNotFoundException, SQLException {
        retornaIP ip = new retornaIP();
        ip.run();
        String local = ip.getIP();
        String Driver = "com.mysql.jdbc.Driver";
        String MySqlConnectString = "jdbc:mysql://" + local + ":3306/clocktime";
        String username = "******";
        String password = "******";
        Class.forName(Driver);
        Connection con = DriverManager.getConnection(MySqlConnectString, username, password);
        return con;
    }

    /* Gera Relatorio e visualiza-o */
    public void geraRelatorio(String query) throws JRException, Exception {
        jifRelAlunos RA = new jifRelAlunos();
        query = RA.getSql();

        Connection con = getConnection();
        Statement stm = con.createStatement();
        System.out.println(query);
        //String query = "select * from reg_alunos";
        //String query
//        String query = "SELECT r.cod as cod_aluno, r.nome as nome_aluno, r.endereco as endereco_aluno,     r.numero as numero_aluno,     r.complemento as complemento_aluno,     r.bairro as bairro_aluno,     r.cidade as cidade_aluno,     r.uf as uf_aluno,     r.rg as rg_aluno,     r.cpf as cpf_aluno,     r.sexo as sexo_aluno,     r.telefone as telefone_aluno,     r.celular as celular_aluno,     r.periodo as periodo_aluno,     r.curso_xp as curso_xp_aluno,     r.curso_word as curso_word_aluno,     r.curso_excel as curso_excel_aluno,     r.curso_point as curso_point_aluno,     r.idade  as idade_aluno,     u.cod as cod_uf,     u.uf as nome_uf FROM     reg_alunos r inner join reg_uf u on r.uf = u.cod";
        ResultSet rs = stm.executeQuery(RA.getSql());
        /* implementação da interface JRDataSource para DataSource ResultSet */
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
        /* HashMap de parametros utilizados no relatório. Sempre instanciados */
        Map parameters = new HashMap();

        //		//compila o relatório
        JasperPrint impressao = JasperFillManager.fillReport(relatorio, parameters, jrRS);
        JasperExportManager.exportReportToPdfFile(impressao, pdf);

        /* Visualiza o relatório em formato PDF */
        JasperViewer.viewReport(impressao, false);
    }

    public static void main(String[] args) throws JRException, Exception {
        new relUtil().geraRelatorio();
    }
}

Muito obrigado a todos!

5 Respostas

gustavogoncalves

Alguem? Por favor, me ajudem com esta minha duvida, falta só isto acredito para finalizá-lo.
Obrigado.

gustavogoncalves

:’(

C

Bom dia

Não consegui entender o seu problema, tipo você esta com problemas na geração do relatório pelo ireport ? Ou esta com problemas na sua aplicação swing mesmo ?

No aguardo.

gustavogoncalves

O meu problema está acontecendo no seguinte. Na classe jifRelAlunos, eu tenho o método set e get que irá informar à classe RelAlunos a string sql que servirá de parâmetro ao relatório.

Só que o que eu estou notando, é que a única sql que está chegando através do encapsulamento para a classe RelAlunos é a que está na linha 22 da classe jifRelAlunos. E na minha própria classe, quando eu removo a inicialização da tabela (que está na linha 16, método initTabela()), o relatório também não é gerado.

Edit: uma outra coisa que esqueci de dizer, por exemplo na linha 42 do jifRelAlunos, eu estou setando a String SQL no procedimento setSql(sql), mas se eu insiro a informação no local, esta informação teria que mudar, certo? Como no procedimento setSql(sql) tem uma linha de impressão, dentro da classe a sql muda, mas quando vai para a outra classe, a que permanece é a sql inicial.

Resumindo, o meu relatório funciona normal, o programa está normal, só esta parte que ta com este problema.

Eu não sei se consegui explicar direito desta vez, esse problema ta comendo meu crãnio ja.

gustavogoncalves

Opa, resolvi meu problema. Vou deixar a solução.

Na classe RelAlunos estava o meu erro na verdade.
Aqui que ta o meu erro:

public void geraRelatorio(String query) throws JRException, Exception {  
        jifRelAlunos RA = new jifRelAlunos();  
        query = RA.getSql();

Se na classe jifRelAlunos dentro do método jbGerarRelatorioActionPerformed eu estou gerando o relatório com um parâmetro, de onde eu tirei da cabeça que deveria chamar o método dentro da classe RelAlunos???
Ta errado. Por isto que tava retornando nulo.
De início, dentro da classe jifRelAlunos a instrução sql estava sendo preenchida sim, entretanto quando ela estava sendo chamada dentro da classe RelAlunos eu estava instanciando a SQL novamente, mas aparentemente sem parâmetro.

Agora, como eu gero o relatório com o parâmetro (String query), o relatório está sendo gerado sem problemas.
Fica aí a dica (se bem que acho que somente eu - o oreia seca - deve ter feito isto no mundo hehehehhehe).

Obrigado pela atenção!

Criado 30 de abril de 2009
Ultima resposta 6 de mai. de 2009
Respostas 5
Participantes 2