我有一个存储过程,需要以下输入参数-
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
有人可以帮我吗?
最佳答案
您可以使用java.util.Date
的构造函数将java.sql.Date
转换为java.sql.Date
:
Date(long 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
类而不是java.util.Date
。关于java - 迄今为止的Java字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43376847/