Manipulando datas

10 respostas
Panuci

Olá pessoal, estou com dificuldades em manipular Datas no java, gostaria da ajuda de vcs!!!!

O programa deve pegar a data atual, quando clicado o botão novo, e mostrá-la na tela, até ai deu certo
O problema é que da erro na hora de efetuar o cadastro no banco

Aqui o erro:

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

Aqui é o trecho do código para cadastro:

public void cadastroCabeloFeito() throws SQLException, ParseException {  
  
                         
              
            CabeloFeito cf = new CabeloFeito();  
  
           SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");  
             
  
  
            cf.setCodcli(Long.valueOf(jTCodcli.getText()));  
            cf.setData(sdf.parse(jTData.getText()));  
            cf.setEscova((String) (jCEscova.getSelectedItem()));  
            cf.setTintura(jTTintura.getText());  
            cf.setOutros((String) jCOutros.getSelectedItem());  
            cf.setMatizacao(jTMatizacao.getText());  
            cf.setPreco(Float.parseFloat(jTPreco.getText().replace(",", ".")));  
            cf.setPgto((String) jCPgto.getSelectedItem());  
            cf.setRest(Float.parseFloat(jTRest.getText().replace(",", ".")));  
            cf.setObs(jTObs.getText());  
  
            CabeloFeitoDao dao = new CabeloFeitoDao();  
            dao.adicionaCabeloFeito(cf);  
  
        }

E aqui o código do Método novo, onde é inserido a data atual:

public void novo() throws ParseException{  
        jTNome.setText("");  
        jTCodcli.setText("");  
  
        //formatando data  
  
         
        Date datas = new Date();  
  
        String dia = ""+datas.getDate();  
        String mes = ""+String.valueOf(datas.getMonth()+1);  
        String ano = ""+(1900 + datas.getYear());  
          
        if(Integer.parseInt(mes)<=9)  
            mes = "0"+mes;  
        jTData.setText((dia+"/"+mes+"/"+ano));  
          
        //fim da formatação  
  
        //jTData.setText("");  
        jCEscova.setSelectedItem("--");  
        jTTintura.setText("");  
        jCOutros.setSelectedItem("--");  
        jTMatizacao.setText("");  
        jTPreco.setText("");  
        jCPgto.setSelectedItem("--");  
        jTRest.setText("");  
        jTObs.setText("");  
     }

10 Respostas

nel

Você está tentando usar um java.util.Date onde deve ser um java.sql.Date. Na sua exceção, deve indicar a linha em que ocorre o problema.
Veja, se está pegando o retorno de uma conexão JDBC, de uma Query, é sempre um java.sql.Date (pode ser Timestamp, mas vamos imaginar só java.sql.Date) e não java.util.Date.

Panuci

O problema ocorre na linha 12 do trecho do cadastro

Mas no método Novo(), onde é pego a data atual é exigido java.util.Date

eu não sei como trabalhar nesta classe com java.sql.Date

por favor Nel dê uma força ai

obrigado

Panuci

Desculpe-me onde está problema(1ª linha) Lê-se Erro

Rodrigo_Sasaki

qual o tipo do atributo data da classe CabeloFeito ? java.util.Date, ou java.sql.Date? Analise os imports

Panuci

Então, no método novo() onde é pego a data atual é exigido o import java.util.Date

e o erro fala exatamente isso, “erro ao tentar converter java.util.Date para java.sql.Date”

obrigado

Rodrigo_Sasaki

Ta, precisamos saber aonde você está enviando um java.util.Date, para um java.sql.Date, se puder postar o método com erro, indicando a linha, facilitaria bastante.

Como o nel disse, você provavelmente está tendo esse problema em algum método de persistência.

Panuci

Então digaoneves o método de persistência está aqui:

import java.sql.Date;

public void adicionaCabeloFeito(CabeloFeito cf) throws SQLException{
        String sql = "insert into cabelofeito(codcli, data, escova, tintura, outros, matizacao, preco, pgto, rest, obs)" +
                " values(?,?,?,?,?,?,?,?,?,?);";

        PreparedStatement stmt = conexao.prepareStatement(sql);

        //Seta os Valores

        stmt.setLong(1, cf.getCodcli());
        stmt.setDate(2, (java.sql.Date) (Date)cf.getData());
        stmt.setString(3, cf.getEscova());
        stmt.setString(4, cf.getTintura());
        stmt.setString(5, cf.getOutros());
        stmt.setString(6, cf.getMatizacao());
        stmt.setFloat(7, cf.getPreco());
        stmt.setString(8, cf.getPgto());
        stmt.setFloat(9, cf.getRest());
        stmt.setString(10, cf.getObs());

        stmt.execute();
        stmt.close();

    }

E respondendo tua pergunta, o método que trabalha com java.util.Date é o método novo() e os getter e setter

valeu

nel

Acredito que o seu erro esteja nessa linha:

stmt.setDate(2, (java.sql.Date) (Date)cf.getData());

Mesmo sendo filha (java.sql.Date extende java.util.Date) você não pode fazer essa conversão. Acredito que isso: cf.getData() retorne um java.util.Date, correto ?
Ai, para converter, é muito simples, basta fazer:

stmt.setDate(2, new java.sql.Date ( cf.getData().getTime() );

Abraços.

Panuci

Valeu Nel matou a pau, parabéns, vc é muito bom!!!

tá funcionando perfeitamente!!!

Que Deus te abençoe!!!

Panuci

REs

Criado 23 de junho de 2012
Ultima resposta 25 de jun. de 2012
Respostas 10
Participantes 3