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

10 respostas
P
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:
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();
		}

	}

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

10 Respostas

E

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());
A

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+

P

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?

A

entao,

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

t+

M
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:
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();
		}

	}

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

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)

P

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

Obrigada =D

F

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

L

Ola paty_trind,

voce pode postar como ficou o seu botao salvar ?

O

obrigado, me ajudou muito.

A

Essa dica me ajudou, thanks!

Criado 27 de outubro de 2011
Ultima resposta 30 de jun. de 2020
Respostas 10
Participantes 8