当我尝试通过报表连接时,为什么无法转换为net.sf.jasperreports.engine.JRDataSource?

时间:2018-08-24 05:52:01

标签: jasper-reports dataset connection classcastexception

我的报告jrxml文件看起来像

{{1}}

但是这里我得到一个ClassCastException,

  

java.lang.ClassCastException:   无法强制转换org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6   到net.sf.jasperreports.engine.JRDataSource

我无法弄清楚,为什么?

1 个答案:

答案 0 :(得分:0)

来自JasperReports api JRDatasetRun

  

数据集运行声明提供数据集参数的值以及数据集将通过其进行迭代的数据源。如果存在与数据集关联的SQL查询,则可以选择将java.sql.Connection传递给数据集而不是JRDataSource实例。该查询由引擎使用JDBC连接执行,并且迭代所获得的java.sql.ResultSet对象。

结论在运行数据集datasetRun时,您可以:

  1. 使用dataSourceExpression标签传递JRDatasource

  2. 使用connectionExpression标记传递JDBC连接

  3. 什么都不传递。

那么你在做什么错了?

您正在dataSourceExpression标记中而不是connectionExpression标记中传递JDBC连接,JasperReports希望它是JRDatasource并尝试将其强制转换。

如果您希望通过报告连接,则应使用connectionExpression,如下所示。

<datasetRun subDataset="listDataset" uuid="364ec058-5b7e-43e0-9272-92907dfba7f3">
    <datasetParameter name="REPORT_DATE">
       <datasetParameterExpression><![CDATA[$P{REPORT_DATE}]]></datasetParameterExpression>
    </datasetParameter>
    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>