// 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);
}
答案 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