Trazer data do banco no formato dd/MM/yyyy

Boa tarde pessoal

uma dúvida básica aqui para os javeiros

preciso mostrar no meu jTextField os dados vindo do meu banco (mysql), que esta aparecendo no formato yyyy-MM-dd. Eu quero que apareça no nosso formato dd/MM/yyyy
antes de mais nada, utilizo já o new SimpleDateFormat(“dd/MM/yyyy”) para gravar no banco e tal.

um exemplo utilizando valor numérico com virgula abaixo. Aqui eu troco o ponto (.) para a virgula (,) … só que agora eu quero converter a Data!
o codigo abaixo sao os registros mostrados no jTable e jogados no jTextField

[code]
private void jTTabelaLinhaSelecionada(JTable tabela)
{
if (tabela.getSelectedRow() != -1)
{
txtValorContrato.setText(String.valueOf(contratos.get(tabela.getSelectedRow()).getValor_contrato()).replace(".", “,”)); //Exemplo da conversao do tipo float

        txtCadastro.setText(String.valueOf(contratos.get(tabela.getSelectedRow()).getCadastro())); //Data - Já tentei a conversão aqui nesta linha, mas nao consegui
    }
    else
    {
        return;
    }
}[/code]

Valeu!

Olha aqui pode ajudar!
http://umcastec.blogspot.com/2010/04/formatando-campos-data-com.html

vlw

[quote=UMC]Olha aqui pode ajudar!
http://umcastec.blogspot.com/2010/04/formatando-campos-data-com.html

vlw
[/quote]

UMC, não é bem isso que eu quero. Estas conversões de date eu utilizo no meu sistema todo.
só que agora eu quero a conversao para trazer do banco. só nao estou sabendo onde colocar e a forma correta

Você deve usar o SimpleDateFormat para jogar a data no formato correto no seu JTextField, e para fazer parse do que foi digitado pelo usuário para Date.
O que você não precisa é usa-lo para gravar dados no banco.

[quote=ViniGodoy]Você deve usar o SimpleDateFormat para jogar a data no formato correto no seu JTextField, e para fazer parse do que foi digitado pelo usuário para Date.
O que você não precisa é usa-lo para gravar dados no banco.[/quote]

Você deve usar o SimpleDateFormat para jogar a data no formato correto no seu JTextField, e para fazer parse do que foi digitado pelo usuário para Date.
Ok, é isso que faço. O jtextfield recebe 19/04/2010 e no banco aparece 2010-04-19

O que você não precisa é usa-lo para gravar dados no banco.
Nao entendi isso

O exemplo que dei basta você passa a data do BD para que ele formate!

E isso é o banco de dados! 19/04/2010 e ele armazena 2010-04-19

vlw

Justamente, eu sei que é preciso converter a data do bd
maaas eu nao estou sabendo onde eu coloco a formatação
por isso postei aquele codigo pra ver se é ali que pode ser feita a conversão

[code]mport java.util.Date;

public class Dataemjava {

public static void main(String args[]) {

Date data = new Date();

SimpleDateFormat formatdata = new SimpleDateFormat(“dd/MM/yyyy”);//15/04/2010
//SimpleDateFormat formatdata = new SimpleDateFormat(“MM/dd/yyyy”);//04/15/2010
//SimpleDateFormat formatdata = new SimpleDateFormat(“yyyy/MM/dd”);//2010/04/15
//SimpleDateFormat formatdata = new SimpleDateFormat(“dd-MM-yyyy”);//15-04-2010

System.out.println(formatdata.format(data));//original

System.out.println(formatdata.format(Coloca a data que vem do BANCO));//

}

}[/code]

vlw

[quote=rafa120]O que você não precisa é usa-lo para gravar dados no banco.
Nao entendi isso[/quote]

Quem vai converter o formato do Date para o formato do banco é o PreparedStatement.

Ou seja. Para gravar:

  1. Você lê do campo de texto;
  2. Usa o SimpleDateFormat para converter o texto num Date;
  3. Usa o PreparedStatement para rodar o SQL e gravar o Date no banco;

Você não deve concatenar a data no SQL diretamente assim:

String sql = "INSERT INTO tabela(data) VALUES(" + simpleDateFormatDoBanco.format(data) + ")";

E sim usar um PreparedStatement para isso:

String sql = "INSERT INTO tabela(data) VALUES(?)"; PreparedStatement stmt = conn.prepareStatement(sql); stmt.setDate(1, data);

Para ler do banco:

  1. Lê do banco para uma variável do tipo Date;
  2. Usa o SimpleDateFormat para formatar novamente para como o usuário gosta de ver;
  3. Joga o resultado já formatado no JTextField.
1 curtida

vini, utilizo desse jeito mesmo, usando PreparedStatement

mas desculpa ser insistente nisso, mas ainda acho que vcs nao entenderam, ou eu que nao estou entendendo kkkk :stuck_out_tongue:

Olha, eu sei de tudo isso que vcs postaram… tanto é que em todo meu codigo eu tenho estas conversões e funciona normalmente

Vcs endenderam perfeitamente que eu quero trazer a data formatada pro textfield, sim é isso!
maaass nao sei em qual parte do meu codigo eu preciso colocar esta conversao!
se é na parte que vem os dados pela tabela (jTable)
ou se é em alguma outra parte

na verdade, acho que essa dúvida ta sendo mais de compreensão do codigo mesmo, para saber onde utilizar

Eu geralmente coloco a conversão no getValueAt do meu TableModel.

Como está implementado seu TableModel?

eu utilizo defaulttablemodel kkk nao me xingue!
ja li sua assinatura, vários topicos sobre isso. Vou mudar a estrutura da tabela sim, mas depois do meu tcc…estou correndo contra o tempo e se alterar um, tem que alterar todos e tem muita coisa.

segue partes do codigo

DefaultTableModel tmContrato = new DefaultTableModel(null, new String[]{"Obra", "N. Contrato", "Contratada", "Serviço"});

private void mostraPesquisa (List<CadContrato> contratos) { while(tmContrato.getRowCount()>0) { tmContrato.setRowCount(0); //setRowCount(0); //removeRow(0); } if (contratos.size()== 0) { JOptionPane.showMessageDialog(this, "Nenhum contrato encontrado", "Erro", JOptionPane.ERROR_MESSAGE); } else { String[] linha = new String [] {null, null, null, null}; for (int i = 0; i < contratos.size(); i++) { tmContrato.addRow(linha); tmContrato.setValueAt(contratos.get(i).getObra(), i, 0); tmContrato.setValueAt(contratos.get(i).getId_contrato(), i, 1); tmContrato.setValueAt(contratos.get(i).getContratada(), i, 2); tmContrato.setValueAt(contratos.get(i).getServico(), i, 3); } } }

seria por esta parte?

nada? =/

você tentou fazer algo?

vlw

Sim, já tentei colocar na frente do setValueAt, no meio, no final… mas realmente nao to sabendo definir isso nao

“de mão beijada”!rsrs
Banco de dados PostgreSQL!

[code]if (rs.next()) {

            Date g = rs.getDate("data");
           
            java.util.Date d = new java.util.Date();

            SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");

            System.out.println(f.format(g));

        } else {[/code]

vlw

agora já abusando de vc UMC kkk é que eu utilizo DAO

entao, complica um pouco mais … vou postar oq tentei fazer, veja se estou no caminho certo por favor

DAO

[code]
public Date dataCadastro;
public void dataFormatada() throws SQLException
{
String sql = “select * from cad_contratos”;
PreparedStatement stmt = this.conexao.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

    if (rs.next())
    {
        CadContrato c1 = new CadContrato();

        dataCadastro = rs.getDate("cadastro");
        c1.setCadastro(dataCadastro);

    }

    rs.close();
    stmt.close();
}[/code]

Formulario

SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy"); txtCadastro.setText(f.format(dao.dataCadastro));

Voce pode fazer assim cara, faça uma classe pra guardar os metodos abaixo

   public java.sql.Date converteDataEmDataSQL(Date data) {

        java.util.Date dataDoJava = data;

        java.sql.Date dataDoSQL = null;

        try {

            dataDoSQL = new java.sql.Date(dataDoJava.getTime());

        } catch (IllegalArgumentException e) {
            e = new IllegalArgumentException("Erro data invalida: " + data);

        }

        return dataDoSQL;
    } 

     public String converteDataEmString(Date data) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        sdf.setLenient(false);

        try {
            this.dataString = sdf.format(data);
        } catch (IllegalArgumentException ex) {
            ex = new IllegalArgumentException("Erro de conversão\nData: " + data + " inválida");
            System.err.println(ex.getMessage());
        }

        return dataString;
    }


      
            //Instancia o objeto 
            Datas d = new Datas();

           //prepara o comando
            PreparedStatement cmd  connection.prepareStatement(query);
            // eu converto a data do java pra data do mysql
            cmd.setDate(1, new Datas().converteDataEmDataSQL(dataEmissao));
            cmd.setDate(2, new Datas().converteDataEmDataSQL(dataVencimento));

            //executando o script retornado o valores da busca
            ResultSet rs = cmd.executeQuery();

            //definindo o modelo para o meu jTable
            DefaultTableModel model = (DefaultTableModel) jTable.getModel();
 

            //enquando tiver um valor dentro do meu objeto rs
            while (rs.next()) {

                //indexando jTable
                model.addRow(
                        new Object[]{

                    //agora voce format chamando o metodo
                    d.converteDataEmString(rs.getDate("dataEmissao")),
                    d.converteDataEmString(rs.getDate("dataVencimento")),
                    d.converteDataEmString(rs.getDate("dataPagamento")),});
            }

           Espero que ajude !
1 curtida