iReport 2.0.4:字符串类型参数在SQL查询中不起作用吗?

时间:2011-06-14 13:23:07

标签: ireport

我正在处理iReport 2.0.4中通过oracle.jdbc.driver.OracleDriver连接到Oracle数据库的报告,该报告根据联合会员身份返回条目列表。该报告将开始日期,结束日期和联合名称作为参数。查询的基本结构是

select 
    ...
from
    ...
where
    union_opt_in_dt <= $P{EndDate} and
    union_opt_out_dt >= $P{StartDate} and
    union_name = $P{UnionName}
...

其中StartDateEndDate的类型为java.lang.DateUnionName的类型为java.lang.String

问题在于,如果我使用UnionName参数并传入联合名称(例如“AFSCME”),则查询不返回任何数据。如果我删除UnionName参数并对联合名称进行硬编码,如

where
    union_opt_in_dt <= $P{EndDate} and
    union_opt_out_dt >= $P{StartDate} and
    union_name = 'AFSCME'

然后我得到了我期望的那个联合名称的行。

那么为什么日期参数有效,而不是字符串参数?我需要调用字符串参数(例如.trim())以使其工作吗?

更新,修正

在另一个修复它的论坛上找到了另一个问题的答案;我必须在查询中立即替换(术语?)参数,因此需要

where
    union_opt_in_dt <= $P{EndDate} and
    union_opt_out_dt >= $P{StartDate} and
    union_name = '$P!{UnionName}'

有效。我不确定我是否理解它的逻辑(截至一周半前我从未听到Jasper Reports的),但至少我可以继续前进。

更新更新,已修复

好的,所以上述解决方案并不是我需要的;它只替换默认值,不一定是传入的内容.Argh。

为什么日期有效,但不是联合名称?我确保参数中的值与数据库中的值完全匹配,即字符的字符。

1 个答案:

答案 0 :(得分:0)

尝试在传递之前修剪UnionName