0

I'm stuck to do a submit in two kind of fields that get the user input on the form (view) and insert at the database, I've already tried to search and find something on the net and all that I saw were codes that automatically insert the date and time from the pc, but that I want is insert data typed by the user, I'm trying to do this way:

Call model class:

package br.com.jdbc.victor.model;

import java.sql.Date;
import java.sql.Time;

/**
 *
 * @author Victor
 */
public class Call {
    private Long callId;
    private String priority;
    private int priorityId;
    private Long priorityDetailId;
    private Date initialDate, finalDate;
    private Time initialTime, finalTime;
    
    
    public Call(String priority, int priorityId, Date initialDate, Time initialTime, Time finalTime) {
        this.priority = priority;
        this.priorityId = priorityId;
        this.initialDate = initialDate;
        this.initialTime = initialTime;
        this.finalTime = finalTime;
    }

    public Call(String priority, Long priorityDetailId) {
        this.priority = priority;
        this.priorityDetailId = priorityDetailId;
    }
    
    public Call(int priorityId, Long callId){
        this.priorityId = priorityId;
        this.callId = callId;
    }
    
    public Call(){
       this.priority = getPriority();
       this.priorityId = getPriorityId();
       this.initialDate = getInitialDate();
       this.initialTime = getInitialTime();
       this.finalTime = getFinalTime();
       //this.initialDate = new Date();
       //this.initialTime = new Time();
       //this.finalTime = new Time();
    }
    

/* Getters and Setters.... */

}

MySQLCallDAO DAO Class:

package br.com.jdbc.victor.dao.daoentities;

import br.com.jdbc.dao.DAOException;
import br.com.jdbc.victor.controller.CallDAO;
import br.com.jdbc.victor.model.Call;
import br.com.jdbc.victor.model.PriorityDetail;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Victor
 */
public abstract class MySQLCallDAO implements CallDAO {
    
    final String INSERT = "INSERT INTO calls (priority, priorityNum, initialDate, initialTime, finalTime) VALUES (?,?,?,?,?)";
    final String GETALL = "SELECT * FROM calls";
    final String GETID  = "SELECT callId FROM calls ORDER BY callId DESC LIMIT 1";
    final String ORDER = GETALL + " ORDER BY priorityNum, callId";
   
    
    //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    //SimpleDateFormat stf = new SimpleDateFormat("HH:mm");
    private Connection con;
    private PreparedStatement pstm;
    private Statement stm = null;
    private ResultSet rs = null;
    
    
    public MySQLCallDAO(Connection con) {
        this.con = con;
    }
    
    @Override
    public void insert(Call o) throws DAOException {
        
        try{
           pstm = con.prepareStatement(INSERT);
           pstm.setString(1, o.getPriority());
           pstm.setInt(2, o.getPriorityId());
           pstm.setDate(3, new java.sql.Date(o.getInitialDate().getTime()));
           pstm.setTime(4, new Time(o.getInitialTime().getTime()));
           pstm.setTime(5, new Time(o.getFinalTime().getTime())); 
            
           if(pstm.executeUpdate() == 0 ){
              throw new DAOException("The update can't be saved");
           }  
        } catch (SQLException ex) {
            //throw new DAOException("SQL ERROR");
            ex.printStackTrace();
        } finally {
           if(pstm != null){
               try {
                   pstm.close();
               } catch (SQLException ex) {
                   throw new DAOException("Error to close the connection", ex);
               }
           }
        }
    }

FormNewCall view class:

private void btSubmitActionPerformed(java.awt.event.ActionEvent evt) {                                           
        try {                                           
            Call call = new Call();
            MySQLDaoManager man = new MySQLDaoManager("root", "", "localhost", "attendances", 3306);  
            //java.util.Date date_util = new java.util.Date();
            //java.sql.Date date_sql = new java.sql.Date(date_util.getDate());
            //java.sql.Time time_sql = new java.sql.Time(date_util.getTime());
            
            try {
                call.setPriority(cbPriorityDetail.getSelectedItem().toString());
                call.setPriorityNum(Integer.parseInt(tfPriorityDetailId.getText()));
                tfInitialDate.commitEdit();
       /* The line that gives error under */
                call.setInitialDate((Date) tfInitialDate.getValue());
                call.setInitialTime(Time.valueOf(tfInitialTime.getText()));
                call.setFinalTime(Time.valueOf(tfFinalTime.getText()));
                
                man.getCallDAO().insert(call);
                
                if(tfCallId.getText().length() != 0){
                     call.setCallId(Long.parseLong(tfCallId.getText()));
                     man.getCallDAO().update(call);
                }
                if(tfInitialDate.getValue() != null && tfInitialTime.getValue() != null && tfFinalTime.getValue() != null){
                    JOptionPane.showMessageDialog(rootPane, "User Inserted!", "Insert Successful", JOptionPane.INFORMATION_MESSAGE);
                    btNewActionPerformed(evt);
                } else {
                    JOptionPane.showMessageDialog(rootPane, "Please, fill the fields again", "Insert not sucessful", JOptionPane.INFORMATION_MESSAGE);
                    btNewActionPerformed(evt);
                }
            } catch (DAOException ex) {
                JOptionPane.showMessageDialog(rootPane, "MySQL Error", "Error", JOptionPane.ERROR_MESSAGE);
            } catch (ParseException ex) {                Logger.getLogger(FormNewCall.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(rootPane, "Error to make connection", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }             

So I've tried it in all the ways but the stacktrace exception:

run:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
 at br.com.jdbc.victor.view.FormNewCall.btSubmitActionPerformed(FormNewCall.java:360)
 at br.com.jdbc.victor.view.FormNewCall.access$500(FormNewCall.java:30)
 at br.com.jdbc.victor.view.FormNewCall$6.actionPerformed(FormNewCall.java:152)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
 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.Component.processMouseEvent(Component.java:6533)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
 at java.awt.Component.processEvent(Component.java:6298)
 at java.awt.Container.processEvent(Container.java:2236)
 at java.awt.Component.dispatchEventImpl(Component.java:4889)
 at java.awt.Container.dispatchEventImpl(Container.java:2294)
 at java.awt.Component.dispatchEvent(Component.java:4711)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
 at java.awt.Container.dispatchEventImpl(Container.java:2280)
 at java.awt.Window.dispatchEventImpl(Window.java:2746)
 at java.awt.Component.dispatchEvent(Component.java:4711)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
 at java.awt.EventQueue.access$500(EventQueue.java:97)
 at java.awt.EventQueue$3.run(EventQueue.java:709)
 at java.awt.EventQueue$3.run(EventQueue.java:703)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
 at java.awt.EventQueue$4.run(EventQueue.java:731)
 at java.awt.EventQueue$4.run(EventQueue.java:729)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
 at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
 at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
 at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
 at java.awt.Dialog.show(Dialog.java:1084)
 at java.awt.Component.show(Component.java:1671)
 at java.awt.Component.setVisible(Component.java:1623)
 at java.awt.Window.setVisible(Window.java:1014)
 at java.awt.Dialog.setVisible(Dialog.java:1005)
 at br.com.jdbc.victor.view.FormNewCall.lambda$main$0(FormNewCall.java:521)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
 at java.awt.EventQueue.access$500(EventQueue.java:97)
 at java.awt.EventQueue$3.run(EventQueue.java:709)
 at java.awt.EventQueue$3.run(EventQueue.java:703)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

I'd like to know any tips to do a code to allow the user date and time input in database please?! Thanks a lot!!

theEarlyRiser
  • 134
  • 12
  • why don't you use java.util.Date why are you using java.sql.date? are there any special needs? – Irakli Oct 22 '16 at 08:02
  • Please be specific about where this exception occurs: post the full stacktrace and indicate the location of the exception. We are not going to sift through a wall of code to find out where you are trying to cast a `java.util.Date` to a `java.sql.Date`. – Mark Rotteveel Oct 22 '16 at 08:58
  • @JONIVar As he is using JDBC, he will eventually need a `java.sql.Date` (or maybe a `java.sql.Timestamp`). – Mark Rotteveel Oct 22 '16 at 08:59
  • I've edited my question now, translated the whole code to english and i've corrected the way to ask i thought that i wasn't clear... @MarkRotteveel the exception occurs at this line: call.setInitialDate((Date) tfInitialDate.getValue()); all the another lines above are going well to insert, i already did with those commented lines before the try block but i don't wait to pick the system date and time – theEarlyRiser Oct 22 '16 at 19:42
  • I've tried to correct that line that is giving error in this way: call.setInitialDate(Date.valueOf(tfInitialDate.getText())); But the error still persists on, this time gives this stack trace: Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException at java.sql.Date.valueOf(Date.java:143) at br.com.jdbc.victor.view.FormNewCall.btSubmitActionPerformed(FormNewCall.java:359) at br.com.jdbc.victor.view.FormNewCall.access$500(FormNewCall.java:30) at br.com.jdbc.victor.view.FormNewCall$6.actionPerformed(FormNewCall.java:152) – theEarlyRiser Oct 22 '16 at 20:22

2 Answers2

2
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: 
    java.util.Date cannot be cast to java.sql.Date

    at br.com.jdbc.victor.view.FormNewCall.btSubmitActionPerformed(FormNewCall.java:360)

What this probably means is that at the top of your FormNewCall class you have something like import java.sql.Date and tfInitialDate.getValue() returns java.util.Date which are different classes and they're not compatible in that way.

The easiest way to fix this is to add proper conversion there.

call.setInitialDate(new java.sql.Date(tfInitialDate.getValue().getTime()));

Probably you can even omit java.sql. package specifier because that's in your import already.

Update it actually became the following as return type was object on getValue()

call.setInitialDate(new java.sql.Date(((java.util.Date)tfInitialDate.getValue()).getTime()));
Ivan
  • 3,781
  • 16
  • 20
-1

Not able to identify what is wrong with the code.

You should not be using date_util.getDate(). What you probably want is date_util.getTime().

Anyhow see if this link helps.

Community
  • 1
  • 1
Ravindra HV
  • 2,558
  • 1
  • 17
  • 26
  • I've finished to correct my code put whole in english and clarifying my question... so, the problem is at this line: – theEarlyRiser Oct 22 '16 at 19:50
  • call.setInitialDate((Date) tfInitialDate.getValue()); At the beginning i was using those commented lines before the try block but they pick the system date and time, i don't know if i'm supposed to cast it to java.sql.Date, i've already formatted this textField in properties > formatterFactory – theEarlyRiser Oct 22 '16 at 19:54