2017-04-12 72 views
1

我有一個存儲過程,需要以下輸入參數 -
的Java字符串到日期

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進口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 

是否有人可以幫助我嗎?

回答

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級別而不是java.util.Date

+0

嗨你的解決方案的工作,雖然現在我收到以下異常 - java.sql.SQLException:參數1不是一個OUT參數 –

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

你輸入了錯誤的Date。注意你已經輸入java.sql.Date,這對應於演員(Date),將導入改爲java.util.Date,它應該可以工作。

SimpleDateFormat.parse()返回java.util.Date這是不同java.sql.Date一個實例,你不能從一個轉換爲另一個。如果您確實需要java.sql.Date,可以致電convert

+0

上解決了,但現在我的startDate包含異常 - >週三3月15日0時零零分00秒IST 2017年,這種格式將滿足我的存儲過程的輸入格式? –

1

你可以傳遞(java.util.Date)日期OBJ到java.sql.Date構造

java.util.Date startDate = new java.util.Date(); 
      java.sql.Date sqlDate = new java.sql.Date(startDate.getTime());