迄今为止的Java字符串

时间:2017-04-12 18:18:41

标签: java string datetime callable-statement

我有一个需要以下输入参数的存储过程 -

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

有人可以帮帮我吗?

4 个答案:

答案 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());
相关问题