Tengo algunas dudas sobre este, ya vi los otros temas pero todavía no puedo hacer que mi código funcione correctamente.

Quiero enviar fechas a mi base de datos usando JDBC, estoy usando un jTextField (o un JformattedField, intentando en ambos sentidos) y todo lo que obtengo es un error en la base de datos, porque estoy enviando texto en lugar de fecha, entonces, ¿cómo puedo Envío fechas?

EDIT1: Estoy intentando enviar la fecha de nacimiento.

Ya hice algunos intentos, por eso tengo: SimpleDateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy"); java.sql.Date data = new java.sql.Date(formatter.parse().getTime());

try {   
        conecta.conn.setAutoCommit(false);
        PreparedStatement pst = conecta.conn.prepareStatement("INSERT INTO cad_pessoa(cad_cpf,cad_nome, cad_idade, cad_apelido, cad_data) values (?,?,?,?,?)");

        
        pst.setString(1, jFormattedTextFieldCPF.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(2, jTextFieldNOME.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(3, jTextFieldIDADE.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(4, jTextFieldApelido.getText());//pega o texto insirido e armazena no banco de dados
        SimpleDateFormat formatter  = new SimpleDateFormat ("dd/MM/yyyy");
        java.sql.Date data = new java.sql.Date(formatter.parse().getTime());
        pst.setDate(5, formatter.parse(jFormattedTextFieldDATA.getText())); //pega o texto insirido e armazena no banco de dados
        pst.executeUpdate(); //executa o SQL
        
        
        conecta.conn.commit();
        
        
        jFormattedTextFieldCPF.setText(""); //deixa o campo vazio
        jTextFieldNOME.setText(""); //deixa o campo vazio
        jTextFieldIDADE.setText(""); //deixa o campo vazio
        jFormattedTextFieldDATA.setText("");
        jTextFieldApelido.setText(""); //deixa o campo vazio
        
        jFormattedTextFieldCPF.setEnabled(false);
        jTextFieldNOME.setEnabled(false);
        jTextFieldIDADE.setEnabled(false);
        jFormattedTextFieldDATA.setEnabled(false);
        jTextFieldApelido.setEnabled(false);
        JOptionPane.showMessageDialog(null, "Salvo!");
        
            
        
        
        
        
        
        
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(rootPane, "Erro!\n" +ex);

    }
1
Luís Felipe Ambrozin 4 oct. 2021 a las 16:12

3 respuestas

La mejor respuesta

El método setInt() que usa está diseñado para valores enteros y acepta un número entero. Para establecer la fecha, use el método PreparedStatement.setDate().

El java.util.Date que obtiene del método parse() también debe convertirse a java.sql.Date.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date utilDate = formatter.parse(jFormattedTextFieldDATA.getText());
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
pst.setDate(5, sqlDate);

Consulte la documentación sobre la clase PreparedStatement: https://docs.oracle.com/javase/9/docs/api/java/sql/PreparedStatement.html

1
Sergei 4 oct. 2021 a las 15:04

Pst.setInt (5, formatter.parse (jFormattedTextFieldDATA.getText ()));

Esta es la línea culpable. Vea que está usando el método setInt () para establecer una fecha. Eso es absolutamente incorrecto. Utilice el método setDate () en su lugar.

Por ejemplo: pst.setDate (5, formatter.parse (jFormattedTextFieldDATA.getText ()));

0
Vijay Kambala 4 oct. 2021 a las 15:26

Para las personas futuras que tendrán la misma duda, así es como terminó mi código después de corregirlo.

 pst.setString(1, jFormattedTextFieldCPF.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(2, jTextFieldNOME.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(3, jTextFieldIDADE.getText()); //pega o texto insirido e armazena no banco de dados
        pst.setString(4, jTextFieldApelido.getText());//pega o texto insirido e armazena no banco de dados
        SimpleDateFormat formatter  = new SimpleDateFormat ("dd/MM/yyyy");
        java.util.Date utilDate = null;
                try {
                    utilDate = formatter.parse(jFormattedTextFieldDATA.getText());
                } catch (ParseException ex) {
                    Logger.getLogger(Pessoa.class.getName()).log(Level.SEVERE, null, ex);
                }
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        pst.setDate(5, sqlDate);
        pst.executeUpdate(); //executa o SQL
        
        
        conecta.conn.commit();

Aprecio a todos los que intentaron ayudar a un novato como yo.

0
Luís Felipe Ambrozin 4 oct. 2021 a las 15:53