我正在处理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}
...
其中StartDate
和EndDate
的类型为java.lang.Date
,UnionName
的类型为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。
为什么日期有效,但不是联合名称?我确保参数中的值与数据库中的值完全匹配,即字符的字符。
答案 0 :(得分:0)
尝试在传递之前修剪UnionName
。