我需要使用iReport生成报告,我试图从2个不同的数据库中获取数据。我是通过(Bilal Siddiqui,JasperReports 3.6开发食谱的作者)关注这篇文章的。但是我每次都得到以下错误。它单独工作很好,但当我使用子报告时,它开始给我错误。
主报告:-
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="MasterReport" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="projectName" class="java.lang.String">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["D:\\rEPORTS\\"]]></defaultValueExpression>
</parameter>
<parameter name="connectionParam" class="java.sql.Connection" isForPrompting="false">
<defaultValueExpression><![CDATA[java.sql.DriverManager.getConnection("jdbc:mysql://localhost/liferay_6.0.6", "root", "root")]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[QUERY]]>
</queryString>
<field name="EMAIL" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="32" splitType="Stretch">
<staticText>
<reportElement x="0" y="2" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12"/>
</textElement>
<text><![CDATA[EMAIL]]></text>
</staticText>
<staticText>
<reportElement x="126" y="2" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12"/>
</textElement>
<text><![CDATA[Work Station Name]]></text>
</staticText>
<staticText>
<reportElement x="260" y="2" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12"/>
</textElement>
<text><![CDATA[Work Station Type]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="100" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{EMAIL}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="271" y="0" width="200" height="100"/>
<subreportParameter name="emailAddress">
<subreportParameterExpression><![CDATA[$F{EMAIL}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{connectionParam}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "WorkstationSubReport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
错误
net.sf.jasperreports.engine.fill.JRExpressionEvalException异常:
上述示例在iReport中不适用,但在实际应用中可能适用。问题是,即使数据库驱动程序已添加到ireport类路径中,并且您尝试使其可重新加载,iReport也无法自动理解数据库驱动程序的动态加载。因此,您需要从iReport获取已建立的连接。
以下是您的问题的解决方案。
com.jaspersoft.ireport.designer.utils.Misc.get连接(HSQLDB)是成功的关键。记住删除主报表中创建的连接参数,否则不会产生任何结果。
<subreport>
<reportElement uuid="ba5a0c29-332c-4e81-b3b6-71c17d7d2c41" positionType="Float" x="0" y="182" width="364" height="72"/>
<connectionExpression><![CDATA[com.jaspersoft.ireport.designer.utils.Misc.getConnection("HSQLDB")]]></connectionExpression>
<subreportExpression><![CDATA["\\\\subreportdir\\subreport_orders.jasper"]]></subreportExpression>
</subreport>
蝎子
此问题的解决方案是,首先在主报告中编写一个查询,提取记录,然后用默认值表达式定义connectionParam,如下所示
“java.sql.DriverManager.getConnection(”jdbc:oracle:thin:@//
在您的情况下,您首先定义了连接参数,因此您无法在 Ireport 中运行主报表的查询。
谢谢,斯里坎特·卡塔姆
请尝试以下步骤在 iReport 中测试主报表和子报表:
java.sql.连接
类型的参数。为其设置defaultValue表达式。在主报表的子报表的连接表达式中使用此参数。主报告的代码段:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["<some_path>"]]></defaultValueExpression>
</parameter>
<parameter name="connectionParam" class="java.sql.Connection" isForPrompting="false">
<defaultValueExpression><![CDATA[java.sql.DriverManager.getConnection("jdbc:oracle:thin:@//<server_name>:<server_port>/<SID_name>", "<user>", "<password>")]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT id, name FROM main_table]]>
</queryString>
<field name="ID" class="java.lang.String"/>
<field name="NAME" class="java.lang.String"/>
<title>
<band height="79" splitType="Stretch"/>
</title>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="20" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="259" y="25" width="200" height="100"/>
<subreportParameter name="masterId">
<subreportParameterExpression><![CDATA[$F{ID}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{connectionParam}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "several_connections_subreport1.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>
子报告的片段:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<parameter name="masterId" class="java.lang.String"/>
<queryString>
<![CDATA[SELECT details, id FROM details_table where masterId =$P{masterId}]]>
</queryString>
<field name="DETAILS" class="java.lang.String"/>
<field name="ID" class="java.lang.String"/>
<title>
<band height="50">
<textField>
<reportElement x="176" y="20" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$P{masterId}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="57" y="17" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{DETAILS}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
问题内容: 什么是实现将采用字符串并根据运算符优先级输出结果的python程序的最佳方法(例如:“ 4 + 3 * 5”将输出19)。我在谷歌上寻找解决这个问题的方法,但是它们都太复杂了,我正在寻找一个(相对)简单的方法。 澄清:我需要比eval()稍微先进的东西-我希望能够添加其他运算符(例如,最大运算符-4 $ 2 = 4),或者,我对此在学术上比对专业更感兴趣-我想知道 该怎么 做。 问题答
本文向大家介绍Python用eval评估表达式,包括了Python用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 对象在Python中评估的真值是多少? 相关问题 Python中对象的布尔值:有关覆盖对象评估方式的讨论 问题答案: 可以测试任何对象的真值,以在if或while条件中使用或用作以下布尔运算的操作数。以下值为“假”: 没有 假 任何数值类型的零,例如,,,。 任何空序列,例如,,。 任何空映射,例如。 用户定义的类的实例,如果该类定义了或方法,则该方法返回整数0或bool value时
我们正在使用iReport 5.0.1,并且已经成功地转换了我们的许多水晶报告包。 我正在处理整数和双精度数据类型的混合数据,并且我正在详细信息部分的变量字段中执行计算。 然后,我有3个变量对详细数据求和。第一个变量是上面的细节变量的直接和。第二个根据IF..THEN.ELSE语句添加一个参数或第二个参数,第三个根据类似的IF..THEN.ELSE语句减去相同的参数值。 我需要舍入组页脚中的3个变
本文向大家介绍评估后缀表达式,包括了评估后缀表达式的使用技巧和注意事项,需要的朋友参考一下 为了求解数学表达式,我们需要前缀或后缀形式。将中缀转换为后缀后,我们需要后缀评估算法来找到正确的答案。 在这里,我们还必须使用堆栈数据结构来解决后缀表达式。 从后缀表达式中,找到一些操作数后,将它们压入堆栈。找到某个运算符后,将从堆栈中弹出两个项目,并按正确的顺序执行操作。之后,结果也被压入堆栈中以备将来使
我试图在iReport中实现一个简单的表达式,但无论我尝试什么,似乎都给了我一个错误。这似乎是一件很简单的事情,但每当我尝试用Java做任何事情时,我都需要大约20次尝试才能把它做好。 我所要做的就是在整数字段的值不为零时显示子报告。我正在对子报告控件使用打印时表达式。 以下是我尝试过的许多事情中的一些: 显然我的Java很烂。任何帮助都将不胜感激。谢谢