Alimentando um JTable com datas no formato dd/MM/yyyy [RESOLVIDO]

Olá pessoal,

Eu pesquisei muito no forum antes de postar essa dúvida, encontrei muita coisa a respeito da classe SimpleDateFormat mas não consegui aplicar os exemplos ao meu código.

Meu problema é o seguinte:

  • Eu tenho um método chamado pesquisar() que alimenta um jtable com base num SQL. A questão é que tenho campos que são do tipo data só que é exibido no formato yyyy/mm/dd
    tentei implementar um exemplo que peguei no forum da seguinte forma:

Exemplo original:

[code]SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
Date now = new Date();

String dateAsString = sdf.format(now);
System.out.println(dateAsString); [/code]

e tentei aplicar no meu código para efeito de testes da seguinte forma:

[code]public void pesquisar() {

    StringBuilder qryPesquisa = new StringBuilder();

    try {

            //Insere a descrição das colunas na table.
        String[] colunasTabela = new String[]{"Código","Razão Social","Fantasia",
                                              "Tipo Pessoa","CPF/CNPJ","Endereço",
                                              "Tel","Fax","I.E","Classif.Fiscal",
                                              "Data Cadastro","Data Abertura/Nascimento",
                                              "Limite Crédito","CEP"  };

        //Cria um model para definir o cabeçalho da table
        model = new DefaultTableModel(null, colunasTabela);

        qryPesquisa.append(" SELECT");
        qryPesquisa.append(" tcodigo_pk,");
        qryPesquisa.append(" trazao_social,");
        qryPesquisa.append(" tnome_fantasia,");
        qryPesquisa.append(" ttipo_pessoa_chk,");
        qryPesquisa.append(" tnumero_doc_cpf_cnpj,");
        qryPesquisa.append(" tendereco,");
        qryPesquisa.append(" tnumero_telefone,");
        qryPesquisa.append(" tnumero_fax,");
        qryPesquisa.append(" tinscricao_estadual,");
        qryPesquisa.append(" tclassificacao_fiscal_fk,");
        qryPesquisa.append(" tdata_cadastro,");
        qryPesquisa.append(" tdata_fund_ou_nascimento,");
        qryPesquisa.append(" tlimite_credito,");
        qryPesquisa.append(" tcidade_fk");
        qryPesquisa.append(" FROM  ");
        qryPesquisa.append(" contas_a_receber.tcliente");

        tbPesquisaCliente.setModel(model);

        switch(cbFiltro.getSelectedIndex()){
            case 0:
                qryPesquisa.append(" where trazao_social ~* "+"'"+tfFiltro.getText()+"'");
                qryPesquisa.append(" order by trazao_social ");
                break;

            case 1:
                qryPesquisa.append(" where tnome_fantasia ~* "+"'"+tfFiltro.getText()+"'");
                qryPesquisa.append(" order by tnome_fantasia ");
                break;

            case 2:
                qryPesquisa.append(" where tnumero_doc_cpf_cnpj = "+"'"+tfFiltro.getText()+"'");
                break;

        }

       
        conexao.Conexao();
        conexao.executeSQL(qryPesquisa.toString());

        //Alimenta a table com os registros provinientes do banco de dados.
        while (conexao.rs.next()){
            
            model.addRow(new Object[] {
               
                conexao.rs.getInt("tcodigo_pk"),
                conexao.rs.getString("trazao_social"),
                conexao.rs.getString("tnome_fantasia"),
                conexao.rs.getString("ttipo_pessoa_chk"),
                conexao.rs.getString("tnumero_doc_cpf_cnpj"),
                conexao.rs.getString("tendereco"),
                conexao.rs.getString("tnumero_telefone"),
                conexao.rs.getString("tnumero_fax"),
                conexao.rs.getString("tinscricao_estadual"),
                conexao.rs.getString("tclassificacao_fiscal_fk"),
                conexao.rs.getDate("tdata_cadastro"),
                conexao.rs.getDate("tdata_fund_ou_nascimento"),
                conexao.rs.getDouble("tlimite_credito"),
                conexao.rs.getString("tcidade_fk")
            });

        }

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date now = new Date();

        String dateAsString = sdf.format(conexao.rs.getDate("tdata_cadastro"));
        System.out.println(dateAsString);

        tbPesquisaCliente.setRowSelectionInterval(0, 0);
        tbPesquisaCliente.requestFocus();
        tipoTransacao=1;

        

    } catch(Exception e){

        JOptionPane.showMessageDialog(null, "Falhas na pesquisa");
    }

}[/code]

Desta forma queria verificar se o que seria impresso pelo método println era justamente a data formatada, mas em tempo de execução o código cai na exceção no momento que passa pela linha 84.

Caso alguém possa me ajudar agradeço.

Sempre é bom dar detalhes do erro, no teu catch coloque o seguinte código e.printStackTrace()
e coloque aqui o que foi impresso!

Seu maior problema no momento é essa implementação horrivel que é o DefaultTableModel.

Aprenda a implementar seu proprio TableModel. (Na minha assinatura tem um link que te mostra onde aprender isso)

Meu caro thiago.correa as vezes uma boa dica vale mais que mil palavras. Conforme você me orientou coloquei no Exception a linha e.printStackTrace(); com isso a mensagem de erro que foi exibida consegui resolver o problema. Informava que o resultset não estava posicionado corretamente, então modifiquei o código para:

[code]public void pesquisar() {

    StringBuilder qryPesquisa = new StringBuilder();

    try {

            //Insere a descrição das colunas na table.
        String[] colunasTabela = new String[]{"Código","Razão Social","Fantasia",
                                              "Tipo Pessoa","CPF/CNPJ","Endereço",
                                              "Tel","Fax","I.E","Classif.Fiscal",
                                              "Data Cadastro","Data Abertura/Nascimento",
                                              "Limite Crédito","CEP"  };

        //Cria um model para definir o cabeçalho da table
        model = new DefaultTableModel(null, colunasTabela);

        qryPesquisa.append(" SELECT");
        qryPesquisa.append(" tcodigo_pk,");
        qryPesquisa.append(" trazao_social,");
        qryPesquisa.append(" tnome_fantasia,");
        qryPesquisa.append(" ttipo_pessoa_chk,");
        qryPesquisa.append(" tnumero_doc_cpf_cnpj,");
        qryPesquisa.append(" tendereco,");
        qryPesquisa.append(" tnumero_telefone,");
        qryPesquisa.append(" tnumero_fax,");
        qryPesquisa.append(" tinscricao_estadual,");
        qryPesquisa.append(" tclassificacao_fiscal_fk,");
        qryPesquisa.append(" tdata_cadastro,");
        qryPesquisa.append(" tdata_fund_ou_nascimento,");
        qryPesquisa.append(" tlimite_credito,");
        qryPesquisa.append(" tcidade_fk");
        qryPesquisa.append(" FROM  ");
        qryPesquisa.append(" contas_a_receber.tcliente");

        tbPesquisaCliente.setModel(model);

        switch(cbFiltro.getSelectedIndex()){
            case 0:
                qryPesquisa.append(" where trazao_social ~* "+"'"+tfFiltro.getText()+"'");
                qryPesquisa.append(" order by trazao_social ");
                break;

            case 1:
                qryPesquisa.append(" where tnome_fantasia ~* "+"'"+tfFiltro.getText()+"'");
                qryPesquisa.append(" order by tnome_fantasia ");
                break;

            case 2:
                qryPesquisa.append(" where tnumero_doc_cpf_cnpj = "+"'"+tfFiltro.getText()+"'");
                break;

        }

       
        conexao.Conexao();
        conexao.executeSQL(qryPesquisa.toString());
        

        //Alimenta a table com os registros provinientes do banco de dados.
        while (conexao.rs.next()){

                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                Date now = new Date();

                model.addRow(new Object[] {
               
                conexao.rs.getInt("tcodigo_pk"),
                conexao.rs.getString("trazao_social"),
                conexao.rs.getString("tnome_fantasia"),
                conexao.rs.getString("ttipo_pessoa_chk"),
                conexao.rs.getString("tnumero_doc_cpf_cnpj"),
                conexao.rs.getString("tendereco"),
                conexao.rs.getString("tnumero_telefone"),
                conexao.rs.getString("tnumero_fax"),
                conexao.rs.getString("tinscricao_estadual"),
                conexao.rs.getString("tclassificacao_fiscal_fk"),
                conexao.rs.getDate("tdata_cadastro"),
                conexao.rs.getDate("tdata_fund_ou_nascimento"),
                conexao.rs.getDouble("tlimite_credito"),
                conexao.rs.getString("tcidade_fk")
            });

                String dateAsString = sdf.format(conexao.rs.getDate("tdata_cadastro"));
                System.out.println(dateAsString);

        }
       
        tbPesquisaCliente.setRowSelectionInterval(0, 0);
        tbPesquisaCliente.requestFocus();
        tipoTransacao=1;

        

    } catch(Exception e){

        e.printStackTrace();
    }

}[/code]

E aí funcionou legal. Mais uma vez agradeço a ajuda.

===================================================================================

Quanto a implementação do DefaultTableModel Mark_Ameba sempre aprendi muito com o pessoal aqui do forum e não descartarei sua dica,
só me diz de fato qual é o link que ensina a implementar o nosso próprio TableModel e se possível me diz quais são os principais problemas que o DefaultTableModel apresenta, só para eu ficar inteirado da situação.

já vi aqui o link que você relatou estou olhando nesse exato momento.

Cara dei uma olhada por auto e sem sombra de dúvida, você está de parabéns pela iniciativa, vou criar um programa para testes e se tudo der certo posso implementar no meu projeto full do ERP.

Mais uma vez aprendendo com o GUJ.

Obrigado.

O link é esse:

http://www.guj.com.br/posts/list/15/199067.java#1001295

E com certeza depois de aprender a usa-lo corretamente voce vai ver que seu código vai ficar muito melhor.