dúvida com formatos de datas diferentes

6 respostas
marcusluiz83

Boa tarde!

Pessoal, costumo utilizar o seguinte código para formatar um campo de data:

javax.swing.text.MaskFormatter data= new javax.swing.text.MaskFormatter("##/##/####"); tfNascimento = new javax.swing.JFormattedTextField(data);

Utilizo um banco de dados mysql, em que um campo com o formato DATE armazena com o tipo 2010-10-08[i].

Minha dúvida é, o usuário vai informar a data em meu campo formatado com o tipo 08/10/2010, como farei a busca em meu banco com o formato diferente?

Uma observação importante: eu não modelei o banco de dados em questão. É de um outro sistema onde trabalho. Eu não gravarei datas neste banco, apenas farei consultas.

Agradeço pela ajuda!

6 Respostas

thiago.correa

Cara você deve apenas se preocupar em transformar a entrada do usuário em um objeto java.util.Date, a partir daí é o driver do banco de dados que deve saber qual é o formato para pesquisar no BD!

Pense em objetos :wink:

marcusluiz83

Obrigado pela ajuda, mas você poderia me dar um exemplo?

Eu teria que mudar a formatação do meu FormattedTextField?

Mais uma vez, agradeço!

Abraço!

thiago.correa

Fiz um client com um campo formatado!

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.MaskFormatter;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Janela.java
 *
 * Created on 08/10/2010, 16:53:34
 */

/**
 *
 * @author thiago.correa
 */
public class Janela extends javax.swing.JFrame {

    /** Creates new form Janela */
    public Janela() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        MaskFormatter dateMaskFormatter = null;
        try {
            dateMaskFormatter = new MaskFormatter("##/##/####");
        } catch (Exception e) {
        }
        jFormattedTextField1 = new javax.swing.JFormattedTextField(dateMaskFormatter);
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());

        jFormattedTextField1.setColumns(10);
        jFormattedTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jFormattedTextField1ActionPerformed(evt);
            }
        });
        getContentPane().add(jFormattedTextField1);

        jButton1.setText("Enviar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);

        pack();
    }// </editor-fold>

    private void jFormattedTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");//cria o obejto para transformar o texto digitado em um Date
        Date objetoDate = null;
        try {
            objetoDate = sdf.parse(jFormattedTextField1.getText()); //cria um objeto date a partir do que foi digitado pelo usuário
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        long dateEmLong = objetoDate.getTime();//pega a data em milesegundos

        try {
            Class.forName("com.mysql.jdbc.Driver");//carrega o driver do mysql
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }

        Connection conn = null;

        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "");//cria a conexão com o banco

            String insert = "insert into contato (nome, tel, dt_nasc) values ('thiago','123456',?)";//instrução sql para inserir no banco
            PreparedStatement state = conn.prepareStatement(insert);//cria uma instrução

            state.setDate(1, new java.sql.Date(dateEmLong));//set a data ao '?'
            state.executeUpdate();//executa a consulta



        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Janela().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JFormattedTextField jFormattedTextField1;
    // End of variables declaration

}

Todo o código já está comentado!!!

Priuli

Vc apenas tem que converter a data do seu JFormattedTextField e transforma-la em java.util.date, assim como o thiago.correa disse e depois usar no seu dao,

ex com jdbc

java.util.Date dateConsulta = new dateConsulta.Date();

PreparedStatement stm = cd.prepareStatement("SELECT * FROM TABELA WHERE DATA = ? ");
stm.setDate(1, new java.sql.Date(dateConsulta.getTime()));

o driver do banco que deve ser preocupar com a sintaxe de data. e ñ o sistema…

marcusluiz83

Opa!

Acho que entendi, galera!

Vou testar quando chegar em casa.

Agradeço pela ajuda de todos!

Abraço!

thiago.correa

Note que se fóssemos usar o Statement daí teríamos que nos preocupar com o formato da data

sdf.applyPattern("yyyy-MM-dd");
        String dataFormatada = sdf.format(objetoDate);
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "");//cria a conexão com o banco

            String insert = "insert into contato (nome, tel, dt_nasc) values ('thiago','123456','"+dataFormatada+"')";//instrução sql para inserir no banco
            Statement state = conn.createStatement();//cria uma instrução
            
            state.executeUpdate(insert);//executa a consulta



        } catch (SQLException ex) {
            ex.printStackTrace();
        }
Criado 8 de outubro de 2010
Ultima resposta 8 de out. de 2010
Respostas 6
Participantes 3