0
下面是我在Jasper Report中運行的SQL語句。我已經想出瞭如何通過報告參數進行動態查詢。我從fromDate和toDate參數工作正常。我遇到的問題是向WhereClause添加額外的SQL,並在該SQL中計算額外的參數。Jasper報告使用參數的動態查詢
$ P的值!{} userName_sql是
" and u.u_username = $P{userName} "
我結束了一個SQL錯誤,因爲用戶名參數沒有進行評估時追加到SQL。我可以通過像這樣連接來解決問題:
" and u.u_username = '" + $P{userName} + "'"
但是該參數可以被SQL注入。 有沒有辦法讓參數進行評估而不必連接它?
SQL
SELECT tw.time_dt, ca.claimaudit_no,concat(u.u_firstnm, ' ', u.u_lastnm) user, ca.ca_claimtype, tw.time_workflowqueue, sum(tw.time_minutes/60) hrs,
(
select count(*) cnt from hcfasline hsline
where hsline.hcfa_no = phases.hcfa_no
union
select count(*) cnt from ubdtlsline dtlsline
inner join ubsline usline on usline.ubsline_no = dtlsline.ubsline_no
where usline.ub_no = phases.ub_no
order by cnt desc
limit 1
) linecnt
FROM timeworksheet tw
inner join users u on tw.users_no = u.users_no
inner join claimaudit ca on tw.claimaudit_no = ca.claimaudit_no
inner join claimauditphases phases on tw.claimauditphase_no = phases.claimauditphase_no
where tw.time_dt between $P{fromDate} and $P{toDate}$P!{userName_sql}
group by claimaudit_no, user, ca.ca_claimtype, tw.time_workflowqueue, tw.time_dt
order by user, ca.ca_claimtype
用戶名是一個可選參數是可選的。這就是我使用查詢塊參數的原因。我在我的username_sql中有一個參數,但它不會評估,除非我使用串聯,但是這樣可以進行SQL注入。 – 2014-09-21 13:32:37
要使參數可選,您可以檢查我的更新答案。 – Sharad 2014-09-21 15:42:39
但是,謝謝,這是行不通的。數據庫中沒有空的用戶名。這是可選的,運行報告的人員可以篩選特定用戶或省略它並返回所有用戶。但是,這確實給了我一個想法。也許我可以追加或1 = 1,如果他們傳遞的userName參數是空的。我希望有更好的解決方案。 – 2014-09-22 15:19:53