[英]getting Class Cast Exception while sending date to DAO Class
// 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);
}
您需要使用java.util.Date
因為SimpleDateFormat
處理java.util.Date
而不是 java.sql.Date
。
拋出強制異常,以指示代碼已嘗試將對象強制轉換為不是實例的子類。
因此,例如,當嘗試將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
使用import java.util.Date
代替java.sql.Date
SimpleDateFormatObject.parse()
將返回類型為java.util.Date
Date,因此在這種情況下,您將不需要像在此處所做的那樣強制轉換
date = (Date) sdf.parse(dateInString);
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...
此類的import
聲明為java.sql.Date
。 由於SimpleDateFormat.parse(String)
返回java.util.Date
,因此您可能不得不從java.util
導入正確的Date
。
但是,在其余代碼中都需要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);
}
// ...
}
問題是您的Date date
變量的類型為java.sql.Date
,而sdf.parse()
返回java.util.Date
。因此, date=sdf.parse(..)
處的異常。 導入java.util.Date
而不是java.sql.Date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.