Erro: java.lang.String cannot be cast to java.util.Date (RESOLVIDO)

Pessoal, tou precisando de uma forma. Sou iniciante em java e esbarrei num problema aqui numa aplicaçãozinha e tá me dando dor de cabeça.

É o seguinte: tenho um arquivo AtaBean e outro AtaDAO, nesse Bean tenho dois campos do tipo Date (sql.date)

[code]import java.sql.Date;
import java.sql.Time;

public class AtaBean {

private int cod_ata;
private int condominio_cod_cond;
private String numero_ata;
private String assunto_ata;
private Date data_reuniao;
private Time hora_reuniao;
private Date data_registro;
private String texto_ata;[/code]

E no no AtaDAO eu seto esse campos:

public void cadastrarAta(AtaBean b){ try { pstm = (PreparedStatement) mysql.conectar().prepareStatement(cadastraAta); pstm.setInt(1, b.getCondominio_cod_cond()); pstm.setString(2, b.getNumero_ata()); pstm.setString(3, b.getAssunto_ata()); pstm.setDate(4, b.getData_reuniao()); pstm.setTime(5, b.getHora_reuniao());; pstm.setDate(6, b.getData_registro()); pstm.setString(7, b.getTexto_ata()); pstm.executeUpdate(); mysql.desconectar(); } catch (SQLException ex) { Logger.getLogger(AtaDAO.class.getName()).log(Level.SEVERE, null, ex); } }

Aí tenho outro arquivo o AtaView (JFrame) que recebe os dados para colocar no banco de dados (mysql):

[code] private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {
SimpleDateFormat formatarData = new SimpleDateFormat(“yyyy-MM-dd”);
java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();
java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue();

    bean = new AtaBean();
    dao = new AtaDAO();
    if (!"".equals(txtCodigo.getText())) { //verifica se o campo código é vazio, se for o botão salvar funciona como inserção, senão, como alteração
        if (validaDados()) {
            bean.setCondominio_cod_cond(Integer.parseInt(txtCodCondominio.getText().trim()));
            bean.setNumero_ata(txtNumeroAta.getText().trim());
            bean.setAssunto_ata(txtAssunto.getText().trim());
            bean.setData_reuniao(Date.valueOf(formatarData.format(dataReuniao)));
            bean.setHora_reuniao(Time.valueOf(txtHoraReuniao.getText().trim()));
            bean.setData_registro(Date.valueOf(formatarData.format(dataRegistro)));
            bean.setTexto_ata(txtConteudo.getText().trim());
            //recebe o código para fazer a alteração
            bean.setCod_ata(Integer.parseInt(txtCodigo.getText().trim()));
            dao.alterarAta(bean);
            JOptionPane.showMessageDialog(null, "Registro alterado com sucesso!");
            limpaDados();
            jScrollPane1.setVisible(true);
            PanelPesquisar.setVisible(true);
            PanelCentralDados.setVisible(false);
            txtPesquisar.requestFocus();
            verificaBotoes();
            limparPesquisaActionPerformed(null);
        }
    } else {
        if (validaDados()) {
            bean.setCondominio_cod_cond(Integer.parseInt(txtCodCondominio.getText().trim()));
            bean.setNumero_ata(txtNumeroAta.getText().trim());
            bean.setAssunto_ata(txtAssunto.getText().trim());
            bean.setData_reuniao(Date.valueOf(formatarData.format(dataReuniao)));
            bean.setHora_reuniao(Time.valueOf(txtHoraReuniao.getText().trim()));
            bean.setData_registro(Date.valueOf(formatarData.format(dataRegistro)));
            bean.setTexto_ata(txtConteudo.getText().trim());
            dao.cadastrarAta(bean);
            JOptionPane.showMessageDialog(null, "Registro incluído com sucesso!");
            limpaDados();
            jScrollPane1.setVisible(true);
            PanelPesquisar.setVisible(true);
            PanelCentralDados.setVisible(false);
            txtPesquisar.requestFocus();
            verificaBotoes();
            limparPesquisaActionPerformed(null);
        }
    }
}          [/code]

A máscara é essa:

private void mascaras() { try { txtDataReuniao.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####"))); txtDataRegistro.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####"))); txtHoraReuniao.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##:##:##"))); } catch (java.text.ParseException ex) { ex.printStackTrace(); } }

Só que quando executo o programa as máscaras funcionam belezinha, mas na hora de salvar dá o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:597) at br.com.syndic.view.AtaView.access$700(AtaView.java:29) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:416) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971) at javax.swing.JComponent.processKeyBindings(JComponent.java:2963) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717) at java.awt.Component.dispatchEventImpl(Component.java:4730) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Isso tá me dando uma dor de cabeça enorme porque se eu tirar as máscaras das datas funciona beleza, só que aí fica muito deselegante e ruim um sistema sem máscaras.

Alguém pode me ajudar?

PS.: Desculpem o tamanho do post, mas eu queria detalhar bem. Outra coisa, encontrei alguns fóruns por aqui como http://www.guj.com.br/java/256526-erro-javautildate-cannot-be-cast-to-javasqldateresolvido, mas não resolveu o meu caso.

dei uma olhada rápida no seu código…
posso ta errado mas não achei nenhuma linha convertendo util.date em sql.date.

Já tentei fazer isso com essas linhas java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue(); java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue();

Só não sei se funciona.

O que me intriga é que se eu tirar as máscaras funciona perfeito o sistema. :frowning:

tente assim:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date dataReuniao = (Date)formatter.parse(txtDataRegistro.getText());

Fiz essas alterações e agora consegui incluir o registro (salvar), porém as datas não foram salvas, apareceu o seguinte erro:

Jan 06, 2012 12:58:46 AM br.com.syndic.view.AtaView btSalvarActionPerformed Grave: null java.text.ParseException: Unparseable date: "05/01/2012" at java.text.DateFormat.parse(DateFormat.java:357) at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:605) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:420) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971) at javax.swing.JComponent.processKeyBindings(JComponent.java:2963) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717) at java.awt.Component.dispatchEventImpl(Component.java:4730) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Pelo que vi, você está pegando as Strings dos campos abaixo, porém elas estão vindo fora da formatação que você definiu para a data.

java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();  
java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue(); 
//Formatação da data  yyyy-MM-dd
SimpleDateFormat formatarData = new SimpleDateFormat("yyyy-MM-dd");

Verifique o que o campo de texto está retornando, coloque um:

System.out.println(txtDataRegistro.getValue());

isso tem que ta igual sua mascara

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");  

se sua mascara está assim ##/##/####…o SimpleDateFormat tbm tem que tá.

Eu modifiquei para o jeito que tá a mascara “##/##/####”, mas deu o mesmo erro:

Jan 06, 2012 1:15:51 AM br.com.syndic.view.AtaView btSalvarActionPerformed null Grave: null java.text.ParseException: Unparseable date: "03/03/2011" null at java.text.DateFormat.parse(DateFormat.java:357) at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:603) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:418) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6269) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

O problema tá aqui:

try { dataRegistro = (Date)formatter.parse(txtDataRegistro.getText()); dataReuniao = (Date)formatter.parse(txtDataRegistro.getText()); } catch (ParseException ex) { Logger.getLogger(AtaView.class.getName()).log(Level.SEVERE, null, ex); }

Pois elas tão dando erro e tá entrando no meu banco o valor de inicialização das variáveis que é null;

AlisonTI,

Tente colocar assim:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  

Eu não me lembro bem como são os formatos de datas, mas verifique na Internet.

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:603) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:418) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:303) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1661) at javax.swing.JComponent.processKeyBinding(JComponent.java:2879) at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:306) at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250) at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2971) at javax.swing.JComponent.processKeyBindings(JComponent.java:2963) at javax.swing.JComponent.processKeyEvent(JComponent.java:2842) at java.awt.Component.processEvent(Component.java:6281)

Eu dei um system.out. antes de converter as strings para ver como estão vindo e o valor tá vindo correto (03/03/2011)

03/03/2011 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:606)

Tente:

java.sql.Date dataSql1 = new java.sql.Date(dataRegistro.getTime());
java.sql.Date dataSql2 = new java.sql.Date(dataReuniao.getTime());

Incluo esse código aonde, Jonathan_Sales ?

Você pode inserir após:

java.util.Date dataRegistro = (java.util.Date) txtDataRegistro.getValue();  
java.util.Date dataReuniao = (java.util.Date) txtDataReuniao.getValue(); 

java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());  
java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime());  

E passar como parâmetro para seu bean:

bean.setData_reuniao(dataReuniao_Sql);  

bean.setData_registro(dataRegistro_Sql);

Verifique se dá certo, pois faz tempo que eu não utilizo datas.

puts, mesmo erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date at br.com.syndic.view.AtaView.btSalvarActionPerformed(AtaView.java:598) at br.com.syndic.view.AtaView.access$700(AtaView.java:33) at br.com.syndic.view.AtaView$8.actionPerformed(AtaView.java:420) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

Você colocou o formatter?

java.util.Date dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue());    
java.util.Date dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue());   
  
java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());    
java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime()); 

[code]no suitable method found for parse(java.lang.Object)
method java.text.DateFormat.parse(java.lang.String,java.text.ParsePosition) is not applicable
(actual and formal argument lists differ in length)
method java.text.DateFormat.parse(java.lang.String) is not applicable
(actual argument java.lang.Object cannot be converted to java.lang.String by method invocation conversion)

(Alt-Enter mostra dicas)[/code]

Tente:

java.util.Date dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue().toString());      
java.util.Date dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue().toString()); 

Conseguiiiiiiiiiiiii!!! uhhuhuh, hehehe.

Jonathan_Sales, valeu mesmo consegui com o seguinte código:

[code] DateFormat formatter = new SimpleDateFormat(“dd/MM/yyyy”);

    java.util.Date dataRegistro = null;  
    java.util.Date dataReuniao = null;
    try {
        dataRegistro = (java.util.Date) formatter.parse(txtDataRegistro.getValue().toString());
        dataReuniao = (java.util.Date) formatter.parse(txtDataReuniao.getValue().toString()); 
    } catch (ParseException ex) {
        Logger.getLogger(AtaView.class.getName()).log(Level.SEVERE, null, ex);
    }
    
    java.sql.Date dataRegistro_Sql = new java.sql.Date(dataRegistro.getTime());      
    java.sql.Date dataReuniao_Sql = new java.sql.Date(dataReuniao.getTime()); [/code]

Cara, valeu mesmo já tava perdendo as esperanças.

Obg também yhhik pela ajuda.

Tou bastante impressionado com o fórum é a primeira vez que uso e com poucos minutos teve a primeira resposta até que eu encontrei a solução. GUJ realmente está de parabéns.