JCalendar salvando no banco

7 respostas
J

Galera estou com um problema ao salvar no banco de dados, formato Date, com JCalendar vou passar o codigo abaixo com o erro junto!
Agradeço desde já!

JCalendar jc = new JCalendar();
    Date fecha = new Date(WIDTH);
    fecha = (Date) jcData.getDate();


        try {
           Connection con = ConnectionDAO.getConnection();

            String query;
            PreparedStatement stmt;
            if(tfCodpro.getText().equals(""))
            {
                    query = "INSERT INTO produtos(prod_prod, "
                                                + "peso_prod,"
                                                + "uni_prod,"
                                                + "marca_prod,"
                                                + "data_prod,"
                                                + "nome_for) VALUES(?, ?, ?, ?, ?, ?)";
            
            stmt = con.prepareStatement(query);    
            stmt.setString(1, tfProduto.getText());
            stmt.setFloat(2, Float.parseFloat(tfPesopro.getText()));
            stmt.setString(3, (String)cbUnipro.getSelectedItem());
            stmt.setString(4, tfMarcapro.getText());
            stmt.setDate(5,fecha);
            stmt.setString(6, tfNome_est.getText());    
            }



           else{
                query = "UPDATE produtos SET prod_prod = ?,"
                        + "peso_prod = ?,"
                        + "uni_prod = ?,"
                        + "marca_prod = ?,"
                        + "data_prod = ?,"
                        + "nome_for = ? WHERE cod_prod = ?";

            
            stmt = con.prepareStatement(query);
            stmt.setString(1, tfProduto.getText());
            stmt.setFloat(2, Float.parseFloat(tfPesopro.getText()));
            stmt.setString(3, (String)cbUnipro.getSelectedItem());
            stmt.setString(4, tfMarcapro.getText());
            stmt.setDate(5,fecha);
            stmt.setString(6, tfNome_est.getText());
            stmt.setString(7, tfCodpro.getText());
            }


            stmt.executeUpdate();
            stmt.close();
            con.close();

            JOptionPane.showMessageDialog(null, "Salvo com sucesso!");


        }catch (SQLException e){
            System.out.println("Ocorreu um error SQL");
        }

Exception occurred during event dispatching:
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

7 Respostas

andii.brunetta

Olá!
Isso está acontecendo porque vc está tentando gravar um java.util.Date no banco, o banco de dados só suporta java.sql.Date.
Então vc precisa converter seu java.util.Date em java.sql.Date. assim:

new java.sql.Date(data.getTime());

esse data seria um java.util.Date

J

Não consegui implementar, pode mandar como fica pra mim?
continua dando error!
Obrigado!

andii.brunetta

Pelo o que eu entendi seu “fecha” seria seu java.util.Date, então ficaria assim:

stmt.setDate(5,new java.sql.Date(fecha.getTime()));
J

Implementei assim deu tudo certo, salvou tudo blz, mais eu coloquei uma data, ele salvou outra data totalmente errada!

Imagem de como eu coloquei:

http://img853.imageshack.us/img853/2962/datax.png

e salvou com esse valor aqui no banco:
1969-12-31

Date fecha = new Date(WIDTH);

        try {
           Connection con = ConnectionDAO.getConnection();

            String query;
            PreparedStatement stmt;
            if(tfCodpro.getText().equals(""))
            {
                    query = "INSERT INTO produtos(prod_prod, "
                                                + "peso_prod,"
                                                + "uni_prod,"
                                                + "marca_prod,"
                                                + "data_prod,"
                                                + "nome_for) VALUES(?, ?, ?, ?, ?, ?)";
            
            stmt = con.prepareStatement(query);    
            stmt.setString(1, tfProduto.getText());
            stmt.setFloat(2, Float.parseFloat(tfPesopro.getText()));
            stmt.setString(3, (String)cbUnipro.getSelectedItem());
            stmt.setString(4, tfMarcapro.getText());
            stmt.setDate(5, new java.sql.Date(fecha.getTime()));
            stmt.setString(6, tfNome_est.getText());    
            }


           else{
                query = "UPDATE produtos SET prod_prod = ?,"
                        + "peso_prod = ?,"
                        + "uni_prod = ?,"
                        + "marca_prod = ?,"
                        + "data_prod = ?,"
                        + "nome_for = ? WHERE cod_prod = ?";

            
            stmt = con.prepareStatement(query);
            stmt.setString(1, tfProduto.getText());
            stmt.setFloat(2, Float.parseFloat(tfPesopro.getText()));
            stmt.setString(3, (String)cbUnipro.getSelectedItem());
            stmt.setString(4, tfMarcapro.getText());
            stmt.setDate(5,  new java.sql.Date(fecha.getTime()));
            stmt.setString(6, tfNome_est.getText());
            stmt.setString(7, tfCodpro.getText());
            }


            stmt.executeUpdate();
            stmt.close();
            con.close();

            JOptionPane.showMessageDialog(null, "Salvo com sucesso!");


        }catch (SQLException e){
            System.out.println("Ocorreu um error SQL");
        }
andii.brunetta

Vamos rever o que está acontecendo no seu codigo lá no inicio:

JCalendar jc = new JCalendar();  
Date fecha = new Date(WIDTH);  
fecha = (Date) jcData.getDate();

De onde vem esse WIDTH? porque vc sobreescreve esse fecha depois? e de onde vem o jcData?

Pelo o que eu entendi, ficaria assim:

JCalendar jc = new JCalendar();  
Date fecha = (Date) jc.getDate();

obs: nunca mexi com o JCalendar, mas pela lógica é isso

J

entendi, fiz desse jeito, mais continua dando error, de

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

vc nao tem algum exemplo ai pra mim utilizar no meu?

algum exemplo tipo, que pegue a data digitada pelo usuario e grave no banco em formato Date!

Obrigado

andii.brunetta

é estranho estar dando esse erro ainda, quando eu preciso converter uso isso e funciona perfeitamente!
Infelizmente eu não tenho exemplos para desktop, eu mexo com Java EE.
mas é essa questão mesmo, faz um teste,

stmt.setDate(5,  new java.sql.Date(new java.util.Date().getTime()));

isso deve gravar a data de hoje no banco… se gravar, o problema está sendo no seu JCalendar

Criado 10 de maio de 2011
Ultima resposta 10 de mai. de 2011
Respostas 7
Participantes 2