Erro java.util.Date cannot be cast to java.sql.Date[RESOLVIDO]

Oi,
Estou tentando fazer um cast de String para Date,para salvar no banco, mas não ta dando muito certo :S
Tipo eu faço o seguinte:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date data = sdf.parse( datasDasParcelas[i].toString()); parcela.setVencimento(data); parcela.setId_matricula(Integer.parseInt(txtRC.getText())); parcela.setObservacao(observacoes.getText()); parcela.setNumeroParcela(Integer.parseInt(txtQntdeParcelas.getText())); pagamentodao.salvaCalculoPagamento(parcela);//erro aponta para esta linha
só que este erro está ocorrendo :

1 2011-10-27java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date 2 2011-11-26 3 2011-12-26 4 2012-01-25 5 2012-02-24 6 2012-03-25 7 2012-04-24 8 2012-05-24 9 2012-06-23 at ClassesDAO.PagamentoDAO.salvaCalculoPagamento(PagamentoDAO.java:135) at OpcoesPgto$3.actionPerformed(OpcoesPgto.java:686)

Meu método de salvar lá na classe DAO está assim:

[code]public void salvaCalculoPagamento(Parcela pgto)throws Exception
{
PreparedStatement ps = conexao.prepareStatement("select valor,numeroParcela,vencimento,observacao from parcela where Id_matricula= ? ");
ps.setInt(1, pgto.getId_matricula());
ResultSet resultado = ps.executeQuery();
if(resultado.next())
{
return;
}
else
{
PreparedStatement p = conexao.prepareStatement("insert into parcela (id,numeroParcela,valor,vencimento,id_matricula,observacao) values (?,?,?,?,?,?) ");
p.setInt(1, pgto.getId());
p.setInt(2, pgto.getNumeroParcela());
p.setDouble(3, pgto.getValor());
p.setDate(4, (Date) pgto.getVencimento());
p.setInt(5, pgto.getId_matricula());
p.setString(6, pgto.getObservacao());
p.executeUpdate();
}

}[/code]

Alguém sabe o q estou fazendo errado?
Obrigada =D

Você pode fazer um cast de java.sql.Date para java.util.Date (afinal de contas, java.sql.Date extends java.util.Date) mas não o contrário.

Para fazer isso, você tem de criar um objeto novo:

java.util.Date dt = ...;
java.sql.Date d = new java.sql.Date (dt.getTime());
1 curtida

olha,

o preparedStatement trabalha com o Date do pacote java.sql e vc ta tentando passar um Date do pacote java.util.
vc tem duas soluções para isso.
1 - vc trate na sua entidade o atributo vencimento como String e no seu DAO vc converta para a String para Date do pacote java.sql.
2- ou vc troque seu date do atributo vencimento para o do pacote java.sql

ve qual opçao que melhor se encaixa em sua aplicação.

t+

Eu acho q esse problema é nos imports mesmo tipo na tela em que faço o cast eu tenho import java.util.Date; e na que tenho o método de salvar eu tenho import java.sql.Date; mas tipo tentei im portar de java.util mas não deu :S e agora?

entao,

vc vai ter que fazer algo do que eu te disse acima.

t+

[quote=paty_trind]Oi,
Estou tentando fazer um cast de String para Date,para salvar no banco, mas não ta dando muito certo :S
Tipo eu faço o seguinte:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date data = sdf.parse( datasDasParcelas[i].toString()); parcela.setVencimento(data); parcela.setId_matricula(Integer.parseInt(txtRC.getText())); parcela.setObservacao(observacoes.getText()); parcela.setNumeroParcela(Integer.parseInt(txtQntdeParcelas.getText())); pagamentodao.salvaCalculoPagamento(parcela);//erro aponta para esta linha
só que este erro está ocorrendo :

1 2011-10-27java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date 2 2011-11-26 3 2011-12-26 4 2012-01-25 5 2012-02-24 6 2012-03-25 7 2012-04-24 8 2012-05-24 9 2012-06-23 at ClassesDAO.PagamentoDAO.salvaCalculoPagamento(PagamentoDAO.java:135) at OpcoesPgto$3.actionPerformed(OpcoesPgto.java:686)

Meu método de salvar lá na classe DAO está assim:

[code]public void salvaCalculoPagamento(Parcela pgto)throws Exception
{
PreparedStatement ps = conexao.prepareStatement("select valor,numeroParcela,vencimento,observacao from parcela where Id_matricula= ? ");
ps.setInt(1, pgto.getId_matricula());
ResultSet resultado = ps.executeQuery();
if(resultado.next())
{
return;
}
else
{
PreparedStatement p = conexao.prepareStatement("insert into parcela (id,numeroParcela,valor,vencimento,id_matricula,observacao) values (?,?,?,?,?,?) ");
p.setInt(1, pgto.getId());
p.setInt(2, pgto.getNumeroParcela());
p.setDouble(3, pgto.getValor());
p.setDate(4, (Date) pgto.getVencimento());
p.setInt(5, pgto.getId_matricula());
p.setString(6, pgto.getObservacao());
p.executeUpdate();
}

}[/code]

Alguém sabe o q estou fazendo errado?
Obrigada =D[/quote]

troque ai no ultimo código que você postou

p.setDate(4, (Date) pgto.getVencimento());

por
p.setDate(4, new java.sql.Date(pgto.getVencimento().getTime())));

e continue trabalhando com java.util.Date no demais…

basicamente para inserir no seu parâmetro você precisa inserir um sql.Date e não util, mas no demais trabalhe com util.Date (ou melhor ainda, com Calendar, ou ainda alguma api de datas mais facil se preferir)

Obrigada a todos pela ajuda!
Resolvido com o uso do p.setDate(4, new java.sql.Date(pgto.getVencimento().getTime())));

Obrigada =D

1 curtida

Opa… Me ajudou por aqui também…Valeu!

Ola paty_trind,

voce pode postar como ficou o seu botao salvar ?

obrigado, me ajudou muito.

Essa dica me ajudou, thanks!