2013-04-29 10 views
0

修改後,我們有一個用的是iReport的設計器中運行完美的報告,並從JasperReports的塞雷爾語報告停在JasperReportsServer工作存儲過程

我對存儲過程的底層MySQL做了一些小的修改,並相應地調整了報表結構,現在我可以從Designer界面運行報表,但根本不能從服務器運行報表。

我收到一個錯誤如下:

Error Message 

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date 

我的理解是與我們在報告中使用的日期的一個問題,但沒有日期的信息改變了,我知道的。

我會通過附加的報告,以及存儲過程的頂部開始:

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_fasb`(start_date varchar(10), end_date  varchar(10), loc varchar(45)) 
BEGIN 
declare friday_end_date varchar(10); 
declare in_str varchar(255); 

if dayofweek(end_date) = 7 then 
    SET friday_end_date = date_add(end_date, interval 6 day); 
else 
    SET friday_end_date = date_add(end_date, interval (6-dayofweek(end_date)) day); 
end if; 

if dayofweek(end_date) = 7 then 
SET end_date = date_add(end_date, interval -1 day); 
end if; 

if dayofweek(end_date) = 1 then 
    SET end_date = date_add(end_date, interval -2 day); 
end if; 

欣賞任何建議。

回答

1

從我所看到的,所有date數據類型是varchar(10)

由於您使用的是date_add函數,因此不能將'start_date'作爲字符串。

當你試穿一下MYSQL

SELECT date_add(curdate(), interval 6 day); 
Result:2013-05-06 

但是當你嘗試

SELECT date_add('2013-04-30', interval 6 day); 

You do not get any result or you get 'BLOB'這意味着它期待funcation內部日期數據類型的變量。

另外在您的報告中,可能會將您的輸入參數定義爲java.util.Date。 你可能想改變它,看看這是否是輸入參數的問題。 這也可能是一個問題。

希望這會有所幫助。

+0

謝謝,我明白這是如何引起問題的,並提出了建議的更改。該報告在服務器上仍然失敗,這是我發現的:在上週的某個時候,我必須對文本字段進行更改,以嘗試修復先前打破的某些內容。當這個報告無法解決時,我從服務器上刪除了報告,並嘗試重新上傳......這是真正的問題開始的地方,因爲我沒有重新鏈接輸入控件。一旦我應用了您的建議並重新鏈接了輸入控件,它就可以很好地工作......再次感謝您...... – msnyder 2013-04-30 17:28:00

+0

沒有問題。如果我的答案幫助您解決查詢問題,您可能想接受答案,因爲它可能會在未來幫助其他人有類似的問題。 – 2013-05-02 06:44:07