【问题标题】:Error executing sql statement when using java expression in ireport在 ireport 中使用 java 表达式时执行 sql 语句出错
【发布时间】:2015-04-27 00:07:32
【问题描述】:

我正在使用 iReport 进行报告开发。

我有 2 个参数,即第一个参数 (companyName) 嵌入到第二个参数 (pCompanyName) 中。我还使用 2 个选项过滤参数。如果参数为空,则打印出“”或空白,否则打印查询。请参考下面的参数部分。使用 groovy 语言时,会打印出报告。

问题是在将语言从 groovy 更改为 java 表达式后,报告会打印出错误。下面是错误。有人在这里请帮助..绝望。

错误填写打印...执行 SQL 语句时出错:laporan_quota net.sf.jasperreports.engine.JRException:执行 SQL 语句时出错:laporan_quota 在 net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:240) 在 net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1114) 在 net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:691) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1314) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:931) 在 net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:873) 在 net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:87) 在 net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:287) 在 net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:760) 在 com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:891) 在 org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) 在 org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) 原因:java.sql.SQLSyntaxErrorException:ORA-00933:SQL 命令未正确结束 在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)     在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)    在 oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059 )    在 oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)    在 oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)    在 oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:第587章) 在 oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53) 在 oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:774) 在 oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925) 在 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111) 在 oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798) 在 oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845) 在 oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501) 在 net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:233)

Sql

SELECT DISTINCT
b.company_name company_name,
a.app_id permit_id,
b.quota_year,
b.app_id app_id,
g.descr ap_category,
h.descr ap_subcategory,
a.tariff_code hs_code,
h.descr model,
a.product_desc goods_description,
a.quantity quantity,
a.price_tot total_cost,
a.permit_no permit_no,
a.license_id license_no,
a.approved_date approve_date,
a.origin_country origin_country,
a.cnor_addr3 consignor_country,
a.branch_id miti_branch,
c.descr permit_status,
a.port_discharge port_name,
a.effect_date effective_date,
a.expiry_date expiry_date
FROM PERMIT_APP a, MT_PERMIT_APP_MASTER b, MT_REF_PERMIT_STATUS c, MT_QUOTA d, MT_QUOTA_APP e, MT_AP_TYPE f, MT_AP_CATEGORY g,
MT_AP_SUBCATEGORY h, MT_AP_TYPE_OPTION i
WHERE
a.master_app_id = b.app_id
AND b.quota_id = d.quota_id
AND d.quota_id = e.quota_id
AND f.ap_type_code = g.ap_type_code
AND g.ap_category_code = h.ap_category_code
AND h.ap_subcategory_code = b.ap_subcategory_code
AND f.ap_type_code = i.ap_type_code
AND a.status_code = c.status_code
AND c.status_code in ('102','301')
AND i.option_type = 'QUOTA'
$P!{pCompanyName}

参数

1) $P{公司名称}

2) $P!{pCompanyName}

($P{companyName}.isEmpty() ? "" : " AND b.company_name = 'JA' ")

【问题讨论】:

  • $P!{pCompanyName} 是查询的一部分吗?
  • 是的,先生。如果它不为空,它将打印查询。如果为 null,则查询不会显示或为空
  • 您可能需要将其放在其他地方,因为这不是有效 SQL 查询的一部分,这就是错误消息ORA-00933: SQL command not properly ended
  • 哦,我明白了。在这种情况下,我必须找到其他方法来做到这一点。嗯

标签: sql jasper-reports


【解决方案1】:

是的,最后我得到了与我上面的问题相对应的解决方案。

这是因为我没有在if else代码中放括号,这就是为什么错误说sql语句错误但我认为它不是sql语句错误,它是语法错误:

解决方案

改变这个:( $P{companyName}.isEmpty( ) ? "" : " AND b.company_name = 'JA' ")

对此:( ($P{companyName}.isEmpty( ) ) ? "" : " AND b.company_name = 'JA' ")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2018-07-05
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多