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

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

}

}

4 Respostas

fiaux

Entendeu a mensagem?? Dois tipos de Date diferentes. Use apenas um.

eduveks

o problema esta nesta linha não é?

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

Isto se deve por q vc esta fazendo o import do java.sql.Date, e o formatDate.parse devolve um java.util.Date.

Para resolver isto é simples faça assim:

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;
java.util.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 = formatDate.parse(vDatValidade);
System.out.println(data);

TestaConexao conexao = new TestaConexao(); // está em outra classe;
conexao.conectaBanco(); // está em outra classe;

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

A alteração esta em:

java.util.Date data = null;

E também em:

data = formatDate.parse(vDatValidade);
R

Olá,

fiz a alteração que você sugeriu e aparece o seguinte erro:
Fri Oct 17 00:00:00 GMT-03:00 1975
Not yet implemented

Informei a data: 17/10/1975

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.

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