在向DAO Class发送日期时获取Class Cast Exception

时间:2014-07-25 09:50:42

标签: java

// I am trying to send date to my dao class but i am getting exception    
    String dateInString = request.getParameter("date");
                Date date = null;

                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                try {
// i am importing java.sql.Date
                  //i am getting java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
                    date = (Date) sdf.parse(dateInString);
                } catch (ParseException e) {

                    e.printStackTrace();
                }

                LeaveBalance leave = new LeaveBalance(associateID, date,
                        bufferApplicable, buffer);
                assoicatesDAO = new AssociatesDAO();
                boolean success = assoicatesDAO.leaveBalance(leave);
                if (success) {
                    msg = "Associate's leave has been added successfully.";
                } else {
                    msg = "****";
                }
                request.setAttribute("responseMessage", msg);
                dispatcher = request.getRequestDispatcher("/jsp/success.jsp");
                dispatcher.forward(request, response);

            }

6 个答案:

答案 0 :(得分:2)

您需要java.util.Date使用SimpleDateFormat作为java.util.Date java.sql.Date

答案 1 :(得分:2)

抛出异常抛出,表示代码已尝试将对象强制转换为不是实例的子类。

因此,例如,当一个人试图将一个Integer强制转换为String时,String不是Integer的子类,因此将抛出ClassCastException。

Object i = Integer.valueOf(42);
String s = (String)i;            // ClassCastException thrown here.

在你的代码中你应该

import java.util.Date;

     date = sdf.parse(dateInString); //thanks to @ Mustafa sabir

答案 2 :(得分:1)

使用导入java.util.Date代替java.sql.Date

SimpleDateFormatObject.parse() 

将返回java.util.Date类型的日期,因此在这种情况下,您将永远不需要像在此处一样进行投射

date = (Date) sdf.parse(dateInString);

答案 3 :(得分:0)

java.sql.Date是java.util.Date的子类。这意味着sql.Date包含的内容超过了它的超类(它更专业)。这就是为什么你不能将一个util.Date强制转换为sql.Date的原因:JVM无法填充空白'。反过来不是问题。

对于解决方案,您可以导入java.util.Date而不是java.sql.Date,或者,如果这会破坏代码的其他部分,只需在代码中使用完全限定的类名:

java.util.Date date = null;
// etc... 

答案 4 :(得分:0)

此类的import声明为java.sql.Date。当SimpleDateFormat.parse(String)返回java.util.Date时,您可能需要从Date导入正确的java.util

但是,如果代码的其余部分需要java.sql.Date,并且您必须将导入声明保持为相同,请更改以下内容:

{
    // Declare date as proper Date
    java.util.Date date = null;

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    try {
        /* // Cast to proper Date
         * date = (java.util.Date) sdf.parse(dateInString);
         * This cast is actually redundant, so just use:
         */
        date = sdf.parse(dateInString);
    }
    // ...
}

答案 5 :(得分:0)

问题是您的Date date变量属于java.sql.Date类型,而sdf.parse()返回java.util.Date。因此date=sdf.parse(..)处的异常。导入java.util.Date而不是java.sql.Date