我有一个需要以下输入参数的存储过程 -
PROCEDURE `Report_Publishing`(p_StartDate datetime, p_EndDate dateTime, p_Action varchar(15))
从前端我得到以下格式的开始和结束日期 -
start as a String "2017-03-15"
和end as a String "2017-04-17"
,
以下是一段代码,用于将开始和结束日期转换为存储过程所需的格式 -
import java.sql.CallableStatement;
import java.sql.Connection;
import java.util.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.text.SimpleDateFormat;
public List<PublishReportDto> getExport(String start, String end, String action, Connection conn, String sql) {
List<PublishReportDto> publishList = null;
try {
CallableStatement cs = conn.prepareCall(sql);
start += " 00:00:00";
end += " 00:00:00";
Date startDate = null;
Date endDate = null;
try {
startDate = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(start);
endDate = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(end);
} catch (ParseException e) {
e.printStackTrace();
}
cs.setDate(1,(java.sql.Date) startDate);
cs.setDate(2,(java.sql.Date) endDate);
cs.setString(3, action);
cs.registerOutParameter(1, java.sql.Types.DATE);
cs.registerOutParameter(2, java.sql.Types.DATE);
cs.registerOutParameter(3, java.sql.Types.VARCHAR);
ResultSet rs = cs.executeQuery();
我收到以下例外情况 -
Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
修改 -
替换 -
1. import java.sql.Date
import java.util.Date;
2.
cs.setDate(1,startDate);
cs.setDate(2,endDate);
通过
cs.setDate(1,(java.sql.Date) startDate);
cs.setDate(2,(java.sql.Date) endDate);
现在我得到了 -
Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
有人可以帮帮我吗?
答案 0 :(得分:2)
您可以尝试在代码中实现这样的内容:
String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date);
日期会解析你输入的字符串然后它会给你正确的日期希望这有助于:)
答案 1 :(得分:1)
您导入了错误的Date
。请注意,您已导入与演员java.sql.Date
对应的(Date)
,请将该导入更改为java.util.Date
,并且它应该有效。
SimpleDateFormat.parse()
会从java.util.Date
返回java.sql.Date
的实例,您无法从一个转换为另一个。如果您确实需要java.sql.Date
,则可以convert。
答案 2 :(得分:1)
您可以使用java.util.Date
的构造函数从java.sql.Date
转换为java.sql.Date
:
日期(长日期) // java.sql.Date的构造函数
使用给定的毫秒构造Date对象 时间价值。
获取开始日期:
Date startDate = new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse(start).getTime());
获取结束日期:
Date endDate = new java.sql.Date(new SimpleDateFormat("yyyy-MM-dd").parse(end).getTime());
注意 - 将来如果您打算使用仅限日期的值,则应使用 LocalDate
类而不是{{1} }。
答案 3 :(得分:1)
您可以将(java.util.Date)Date obj传递给java.sql.Date构造函数
java.util.Date startDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(startDate.getTime());