2011-02-28 73 views
0

我使用iReport开发了一个报告。该报告应该运行在几个不同的数据库中。jsp将参数传递给ireport

在报告中我提出了几个参数,其中一些包含日期格式。当我使用to_date(<parameter variable>)时,一切进展顺利。

但现在看来这种方法不能在Postgres上运行,所以我试图不使用to_date()

我只是把它作为

ex: date = $P{date}

和我改变初始值

new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2011")

compilling时没有错误,但是当我通过应用程序运行时,它可能出现的错误造成的:

java.io.StreamCorruptedException: invalid stream header: 3C68746D.

后来我试图将参数类型更改为String(从java.util.Date),并把""作为初始值。

它工作正常,除了Oracle数据库。有人能帮我吗?

+0

嗨,不知道我的问题是否正确。如果你想从oracle日期字段转换为char。 '选择to_char(ora_datefield,'DD/MM/YYYY')作为mydate from mytable;' – lkdg 2011-03-01 06:36:20

+0

正确,但我想将它作为参数。我想使用相同的查询和相同的报告模板,可以在三个不同的数据库,mysql,oracle,postgres中成功运行。 – Chi 2011-03-03 04:37:29

回答

0

首先,我想你已经意识到你正在试图将日期字段的字符串值,当你做new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2011"),对吧?

我不知道我是否正确,但我猜你的数据库中的字段是Date,所以你必须使用日期,而不是字符串。最终的格式转换(这将导致一个字符串)必须在您的报告模板或任何您使用的。但数据库会将日期返回给您的API。

+0

“最终的格式转换(这将导致一个字符串)必须在您的报告模板或您正在使用的任何内容中,但数据库会将日期返回给您的API。”我不明白这个部分,对不起。你的意思是新的SimpleDateFormat(“dd/MM/yyyy”)。parse(“01/01/2011”)会输出字符串类型吗?谢谢你的关心。 – Chi 2011-03-03 04:35:10

+0

我的意思是你会发送和接收数据库的日期。流程将与日期而不是字符串。最终的格式转换(将日期转换为字符串)将在您的报表api中执行,并且不再与数据库进行通信。 – bluefoot 2011-03-03 10:38:49

+0

这意味着当我使用java.util.date()作为参数和新的SimpleDateFormat(“dd/MM/yyyy”)。解析(“01/01/2011”)作为初始值,它假设没问题吧?但为什么当我运行应用程序发送错误?此错误:java.io.StreamCorruptedException:无效的流头:3C68746D。我使用Oracle数据库。 – Chi 2011-03-04 01:16:34

0

以字符串格式和'DD/MM/YYYY'格式将日期传递给代码中的i-report。

在我报告编写查询以这种格式(相比变化以适应输入的日期格式):

to_date('fieldnameofDB','DD/MM/YYYY')=$P{nameOfParameterPassed}

只要改变你接受的参数的方式,设置格式参数为String。