異常信息如下:
Error filling print… Error executing SQL statement for : 動態whereSql
net.sf.jasperreports.engine.JRException: Error executing SQL statement for : 動態whereSql at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:246) at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1086) at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:667) at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1253) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:891) at org.openide.util.RequestProcessor
爲什麼會出現這種情況呢?這是因爲 iReport不支持使用 Parameters傳遞 where或 group by子句,如何解決呢?很簡單,使用$P!{ParameterName}即可,這種寫法其實也就是把 SQL 語句的某個片段作爲參數傳入。
重新設計報表使用的 SQL 語句:
再次預覽報表生成的.jasper 文件。
放入Web 項目的 WebRoot 文件夾中,重新運行 IE,正確顯示出的結果。