Erro na conversão de Datas para salvar no MySql

10 respostas
G

Olá, fiz um método para converter datas vindo do um FormattedTextField, ou seja, a data é informada pelo usuario, ele até que está convertendo, mais a data é totalmente diferente da que foi digitada, alguem poderia me dizer onde estou errando. Segue o código:

private void TransformaData() {
        String dataAntiga = txtNasc.getText().replace("/", "-");
        DateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
        try {
            java.sql.Date data = new java.sql.Date(formato.parse(dataAntiga).getTime());
        } catch (ParseException ex) {
            Logger.getLogger(Cria.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

Obrigado!

10 Respostas

thiago.correa
try {
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    String dataDigitada = txtNasc.getText();
    Date data = format.parse(dataDigitada);
} catch (ParseException ex) {  
    Logger.getLogger(Cria.class.getName()).log(Level.SEVERE, null, ex);  
}
G

thiago, continua com erro, está mostrando nesse formato:
Thu Oct 15 00:00:00 BRT 2009, do jeito que vc me falou.
o que eu preciso é transformar um jformattedTextfield no formato: ##/##/####, para yyyy-MM-dd, para poder salvar no mysql, lembrando que no mysql o tipo é DATE.
Obrigado

pmlm

galla.info:
Thu Oct 15 00:00:00 BRT 2009, do jeito que vc me falou.

Isso é como o toString da classe Date mostra a data. Um Date não tem formato, podes é ter uma String com a data formatada de uma dada forma.

galla.info:

o que eu preciso é transformar um jformattedTextfield no formato: ##/##/####, para yyyy-MM-dd, para poder salvar no mysql, lembrando que no mysql o tipo é DATE.
Obrigado

O método do thiago transforma o teu textfield em Date e é esse Date que deves enviar para o mysql, que ele sabe o que fazer com ele. Uma questão que não me parece estar bem no teu método, depois alterado pelo thiago mas ainda assim sem esclarecer essa parte é o facto de ele ser void. Esse método deveria retornar um Date.

private Date transformaData(String dataTexto) throws ParseException {  
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
        String dataDigitada = txtNasc.getText();  
        Date data = format.parse(dataDigitada);  
        return data;
   
}  


(...)
//substituir X pelo valor correcto
pstmt.setDate(X, transformaData(txtNasc.getText());

(...)
G

sim, mais o mysql está retornando o erro:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: ‘Thu Oct 29 00:00:00 BRST 2009’ for column ‘nascimento’ at row 1

Não devo está entendendo alguma coisa fiz o metodo do jeito que vc me falou, e continua retornando o erro!
Obrigado!

pmlm

Estás a fazer setDate?

G

sim. segue o método:

try {
            pstm = bd.conectar().prepareStatement(salvarBD);
            pstm.setString(1, txtNome.getText());
            pstm.setString(2, sexo);
            pstm.setDate(3, (java.sql.Date) transformaData(txtNasc.getText()));
            pstm.setString(4, (String) cboDono.getSelectedItem());
            pstm.setString(5, txtCodigoMae.getText());
            pstm.setString(6, (String) cboMae.getSelectedItem());
            pstm.executeUpdate();
        } catch (ParseException ex) {
            Logger.getLogger(Cria.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(Cria.class.getName()).log(Level.SEVERE, null, ex);
        }

e aparece esse erro também:
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

D

mude o tipo de DATE para varchar, pq assim vc poderá formatar a data (q retorna uma string) e salvar tranquilamente!

pmlm
pstm.setDate(3, new java.sql.Date(transformaData(txtNasc.getText()).getTime());
Eric_Yuzo

galla.info:
e aparece esse erro também:
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

Ao invés de fazer o cast, que é o motivo do erro, crie um objeto java.sql.Date:

pstm.setDate(3, new java.sql.Date(transformaData(txtNasc.getText()).getTime()));

Ou então, pode modificar o método transformaData para que retorne um java.sql.Date:

private java.sql.Date transformaData(String dataTexto) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); String dataDigitada = dataTexto; java.sql.Date data = new java.sql.Date(format.parse(dataDigitada).getTime()); return data; }
Outra coisa, seria interessante separar as operações com o banco de dados de sua classe visual.

pmlm:
pstm.setDate(3, new java.sql.Date(transformaData(txtNasc.getText()).getTime());

hehe, cheguei atrasado.

G

pmlm e Eric Yuzo, mto obrigado, resolvi meu problema!
Até mais!

Criado 27 de dezembro de 2010
Ultima resposta 27 de dez. de 2010
Respostas 10
Participantes 5