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.
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
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!
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.logging.Level;importjava.util.logging.Logger;importjavax.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 */publicclassJanelaextendsjavax.swing.JFrame{/** Creates new form Janela */publicJanela(){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">privatevoidinitComponents(){MaskFormatterdateMaskFormatter=null;try{dateMaskFormatter=newMaskFormatter("##/##/####");}catch(Exceptione){}jFormattedTextField1=newjavax.swing.JFormattedTextField(dateMaskFormatter);jButton1=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(newjava.awt.FlowLayout());jFormattedTextField1.setColumns(10);jFormattedTextField1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jFormattedTextField1ActionPerformed(evt);}});getContentPane().add(jFormattedTextField1);jButton1.setText("Enviar");jButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jButton1ActionPerformed(evt);}});getContentPane().add(jButton1);pack();}// </editor-fold>privatevoidjFormattedTextField1ActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:}privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){SimpleDateFormatsdf=newSimpleDateFormat("dd/MM/yyyy");//cria o obejto para transformar o texto digitado em um DateDateobjetoDate=null;try{objetoDate=sdf.parse(jFormattedTextField1.getText());//cria um objeto date a partir do que foi digitado pelo usuário}catch(ParseExceptionex){ex.printStackTrace();}longdateEmLong=objetoDate.getTime();//pega a data em milesegundostry{Class.forName("com.mysql.jdbc.Driver");//carrega o driver do mysql}catch(ClassNotFoundExceptionex){ex.printStackTrace();}Connectionconn=null;try{conn=DriverManager.getConnection("jdbc:mysql://localhost/jdbc","root","");//cria a conexão com o bancoStringinsert="insert into contato (nome, tel, dt_nasc) values ('thiago','123456',?)";//instrução sql para inserir no bancoPreparedStatementstate=conn.prepareStatement(insert);//cria uma instruçãostate.setDate(1,newjava.sql.Date(dateEmLong));//set a data ao '?'state.executeUpdate();//executa a consulta}catch(SQLExceptionex){ex.printStackTrace();}}/** * @param args the command line arguments */publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newJanela().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JButtonjButton1;privatejavax.swing.JFormattedTextFieldjFormattedTextField1;// 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.DatedateConsulta=newdateConsulta.Date();PreparedStatementstm=cd.prepareStatement("SELECT * FROM TABELA WHERE DATA = ? ");stm.setDate(1,newjava.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");StringdataFormatada=sdf.format(objetoDate);try{conn=DriverManager.getConnection("jdbc:mysql://localhost/jdbc", "root", "");//cria a conexão com o banco String insert = "insertintocontato(nome,tel,dt_nasc)values('thiago','123456','"+dataFormatada+"')";//instruçãosqlparainserirnobancoStatementstate=conn.createStatement();//criaumainstruçãostate.executeUpdate(insert);//executaaconsulta}catch(SQLExceptionex){ex.printStackTrace();}