Erro: java.util.Date cannot be cast to java.sql.Date

5 respostas
R

Olá,

Estou tentando incluir os dados em um BD e retorna o seguinte erro:
java.util.Date cannot be cast to java.sql.Date

Segue a classe:

package estoque;

import java.sql.ResultSet;

import javax.swing.*;

import java.sql.Date;

import java.sql.PreparedStatement;

import java.text.SimpleDateFormat;

public class CadProdutos extends javax.swing.JFrame {

private int vCodigo, vTipo;

private String vNome, vDatValidade;

Date data = null;

SimpleDateFormat formatDate;

ResultSet resultado_RS;

private void jbt_AdicionarActionPerformed(java.awt.event.ActionEvent evt) {
try {

vTipo = Integer.parseInt(jtf_Estado.getText());
vNome = jtf_Nome_Produto.getText();
vDatValidade = jtf_Data_Validade.getText();
formatDate = new SimpleDateFormat("dd/MM/yyy"); // coloquei 01/07/2008 - data
data = (Date) formatDate.parse(vDatValidade);
System.out.println(data);

TestaConexao conexao = new TestaConexao(); [color=darkred]// está em outra classe;[/color]
conexao.conectaBanco(); [color=darkred]// está em outra classe;[/color]

PreparedStatement stmt = conexao.prepareStatement("insert into Produtos(Nome_Produto, Data_Validade, Tipo) values (?, ?, ?)");
stmt.setString(1, vNome);
stmt.setDate(2, new java.sql.Date(data.getTime()));
stmt.setInt(3, vTipo);
stmt.executeUpdate();
} catch(Exception e){

JOptionPane.showMessageDialog(null, Erro, Mensagens, JOptionPane.INFORMATION_MESSAGE);

System.out.println(e.getMessage());

}

}

5 Respostas

L

O erro foi nessa linha?

data = (Date) formatDate.parse(vDatValidade);

Talvez seja porque você está chamando o método que retorna um Date do tipo java.util e está fazendo um casting nesse objeto para um Date java.sql

Quando você for criar o objeto Date importe a classe de java.util ou mude a classe direto no código:

java.util.Date data = null;

Espero que dê certo :d

BrunoBastosPJ

Preste bastante atenção quando usar seus imports :wink:

Você está importanto um tipo java.sql.Date, e o método parse de SimpleDateFormat retorna um objeto java.util.Date.

Na linha stmt.setDate(2, new java.sql.Date(data.getTime())); você já está tratando o problema de tipos incompatíveis, então acredito que se você modificar seu import para
import java.util.Date;
O problema será resolvido!

Abs

R

Olá,

Fiz a seguinte alteração:
java.util.Date data = null;

data = formatDate.parse(vDatNasc);

PreparedStatement stmt = conexao.prepareStatement("insert into Alunos(NOME_ALUNO, DATA_NASCIMENTO, ESTADO) values (?, ?, ?)");
stmt.setString(1, vNome);
stmt.setDate(2, new java.sql.Date(data.getTime()));
stmt.setInt(3, vEstado);
stmt.executeUpdate();

Agora aparece o seguinte erro:
Fri Oct 17 00:00:00 GMT-03:00 1975
Not yet implemented

R

Coloquei uns System.out.println na classe:

System.out.println(vDatValidade): 17/10/1975
System.out.println(data): Fri Oct 17 00:00:00 GMT-03:00 1975
System.out.println(new java.sql.Date(data.getTime()));: 1975-10-17.

No Banco de dados o campo é do tipo Date.

J

Qual o driver você está usando, provavelmente esse erro é porque o driver não suporta alguma coisa que você está usando, talvez o setDate().

Criado 1 de julho de 2008
Ultima resposta 1 de jul. de 2008
Respostas 5
Participantes 4