2013-04-29 49 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