[转]JasperReport用户手册之六

5.4 报表查询(Report Query)
      
为了要为报表装填数据,我们需要为报表引擎提供所需的数据,或者至少告诉它怎样去获取数据。 JasperReport 通常需要接受一个 net.sf.jasper.engine.JRDataSource 对象作为报表的数据源,同时作为更为强大的功能, JasperReport 能直接用 JDBC 从关系数据库总获取数据。类库允许用户在他们的报表设计中提供 SQL 查询以便可以自运行期从数据库中提取数据。要做到这一点,你只需要在装填的时候为装填管理器的 fillReport() 方法提供一个 java.sql.Connection 而不是 JRDataSource 对象即可。
在报表中,可以使用元素来引入查询。如果这个元素存在,则出现在报表参数声明之后,报表 field 之前。

如下是一个SQL查询的例子:

      
为了更好的定制从数据库中取回的数据集(data set),一个重要的方面是在报表查询字符串中报表参数的使用(use of report parameters)。在查询中,这些参数可能会像动态过滤器(dynamic filter)一样工作,它们用特殊的语法被引入进来为报表提供数据,很像report expression
如下有两种在查询中的使用参数的方法:
1.
像通常的java.sql.PreparedStatement的参数那样使用,用如下语法:

SELECT * FROM Orders WHERE OrderID <= $P{MaxOrderID} ORDER BY ShipCountry
]]>
2.
有时,我们需要使用参数来动态更改SQL查询的某些部分,或将整个SQL查询作为参数提供给装填过程。在这种情况下,语法稍微有些不同,向下面的例子,注意
SELECT * FROM $P!{MyTable} ORDER BY $P!{OrderByClause}
]]>
      
在这个例子中,这个引入了参数值得特殊的语法确定了我们为这些参数所提供的值将会替代查询中的参数引用($P!{}的内容)。这些参数将被传给使用java.sql.PrepqredStatement对象的数据库服务器。
事实上,报表引擎首先处理$P!{}参数引用,通过使用他们的值来获取最重的SQL查询,并且仅当这件事完成之后,引擎才会将剩下的普通的$P{}参数引用传递给usual IN parameters--实际上就是嵌套查询啦。
第二种用于SQL查询的参数引用允许你在运行期传递整个SQL查询语句:
$P!{MySQLQuery}
      
注意:你不能在参数值中再加入参数引用,也就是说,参数引用不能嵌套使用。
更详细的信息可以参看工程所带的例程:jaspersubreportscriptletwebapp以及最有学习价值的query

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值