Inserir um campo Date no mysql

6 respostas
C

Olá, como faço para inserir um campo Date no mysql?? tenho que colocar o banco a data como char mais na hora de fazer consultas nem sempre me retorna aquilo que busco.

// PEGUEI APENAS O CAMPO DATA PARA TENTAR PASSAR A MINHA DÚVIDA

 public class Lancamento {

 
 private String data;// COLOQUEI STRING PORQUE QUANDO COLOCO DATE NA HORA DE INSERIR NÃO CONSIGO


 public String getData() {


        return data;

    }

    public void setData(String data) {
        this.data = data;
    }


//


// MINHA DAO
 public class LancamentoDAO{	


 sql="insert into lanc_abastecimentos(data) values (?,)";
            ps=this.conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            
            ps.setString(1,lancamento.getData());// COLOQUEI STRING POR QUE QUANDO COLOCO DATE DÁ ERRO MESMO SE EU COLOCAR NA CLASSE LANCAMENTO O TIPO DATE


            ps.executeUpdate(); //altera, inlcui e deleta
            ResultSet rs=ps.getGeneratedKeys();
            rs.next();
            lancamento.setId(rs.getInt(1));
        } catch(SQLException se){
            throw new PersistenciaException(se);
        }
    }



// CÓDIGO NO BOTÃO SALVAR NO JFRAME

   private void jb_excluiActionPerformed(java.awt.event.ActionEvent evt) {                                          
GerenciaConexao gc = new GerenciaConexao();
        try{
            gc.abrir();
            Connection c = gc.get();

             LancamentoDAO dao = new LancamentoDAO(c);

             Lancamento lancamento = new Lancamento();
            
       
             
             String data = this.tf_data_lancamento.getText();
            
                          
            lancamento.setData(data);
                                    
            dao.novo(lancamento);
            
            JOptionPane.showMessageDialog(null,"Lançamento Efetuado com Sucesso");
            
            
        } catch(PersistenciaException pe){
            JOptionPane.showMessageDialog(null,"Erro ao Gravar Registro"+pe);
        } finally{
            gc.fechar();
        }
        

}

6 Respostas

_Renatu

Dá uma lida na API do PreparedStatement…

Você vai ver que vai ter um método setDate pra você usar no lugar do setString…
Se você precisar de informações de hora e minuto também, pode dar uma olhada no setTimestamp…

felipealbuquerque

Olá, Cristian! Como solicitado, estou aqui!

É exatamente como o Renato falou: para diversos tipos de campo existem métodos setXXX na API do PreparedStatement. Por exemplo, para passar um valor inteiro tem o setInt, para passar um varchar, o setString. Para passar uma data, o setDate, etc…
No caso do seu código, faça o que o Renato falou e, adicionalmente, retire a vírgula que ficou sobrando no seu comando SQL, de modo que ele fique assim:

sql="insert into lanc_abastecimentos(data) values (?)";

Até mais! :smiley:

C

Valeu, obrigado, já estou tentando irei postar o resultado

C

Olá, voltei fiz da seguinte forma

// class Lancamento


public class Lancamento {
    
// apenas um campo int e Date para não confundir ( O problema é na data)
        
    private int id;

    private Date data; // mudei para Date
  
    public Lancamento() {

    }

// gets e sets    

public Date getData() { 
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}


//-------------------------------------------------

// Class MovimentoDAO

// apenas a parte que interessa

 sql="insert into movimento(data) values (?)";

            ps=this.conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            
            ps.setDate(1,lancamento.getData()); // AQUI COLOQUEI setDate
                        
 
            ps.executeUpdate(); 
            ResultSet rs=ps.getGeneratedKeys();
            rs.next();
            lancamento.setId(rs.getInt(1));
        } catch(SQLException se){
            throw new PersistenciaException(se);
                                }
// ------------------------------------------------------------




// Código do botão salvar no jframe Lancamento



GerenciaConexao gc = new GerenciaConexao();

        try{
            gc.abrir();
            Connection c = gc.get();
             LancamentoDAO dao = new LancamentoDAO(c);
             Lancamento lancamento = new Lancamento();
            

             
             String data = this.tf_data.getText(); //pega o valor do tf_data
         
                         
         
                 lancamento.setData(data);// agora está dando erro aqui, creio que  tenho que formatar mais não sei como
                                    
         
   dao.novo(lancamento);
            
            JOptionPane.showMessageDialog(null,"Lançamento Efetuado com Sucesso");
            
            
        } catch(PersistenciaException pe){
            JOptionPane.showMessageDialog(null,"Erro ao Gravar Registro"+pe);
        } finally{
            gc.fechar();
        }
        

//
felipealbuquerque

Não dá para passar String em um campo Date mesmo. Dá uma olhada na API do SimpleDateFormat. Vamos utilizar um exemplo:

// Dado que você informa a data no campo tf_data no formato dd/MM/yyyy
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

// Converte o texto para Date
try {
    Date data = sdf.parse(tf_data.getText());
    lancamento.setData(data);
} catch (ParseException parseException) {
    // Trata a exception em que a data foi informada em um formato inválido
}

Vale a pena dar uma estudada nessas API’s. Há outros tópicos aqui no GUJ que cobrem melhor esse assunto.

C

Olá olha eu aqui de novo, caramba tentei de várias formas e não consegui, poxa, o herói que puder me ajudar
estou enviando o projeto para análise, é bem pequeno o banco em mysql está indo junto , são apenas 3 campos e um deles é a data , no banco a data está como char, desta maneira consigo incluir novamente mais não consigo quando coloco a data do tipo date, já formatei mais dá um erro diferente muito chato preciso de ajuda

fiz no netbeans

Criado 2 de maio de 2008
Ultima resposta 7 de mai. de 2008
Respostas 6
Participantes 3