在使用Ireport的时候,我从不建议采用这种方式制作报表:
JasperPrint jasperPrint = JasperFillManager.fillReport(String,Map,Connection); 使用hibernate的Session同样不推荐。
原因:
1.性能考虑:
如果你将一个数据库连接交给ireport也就意味着,你必须等待ireport将所有的操作完成才可以回收该链接,如果是在大批量数据显示的情况下(往往如此),将占用很长很长的连接时间,如果实现了JRDataSource接口,先将数据保存到一个list中,那么将花费你极少的时间来处理数据库这部分,之后的数据显示再交给ireport
2.数据库部分与ireport耦合太大
尤其是采用hibernate的session 那样带来的耦合度更大,
3.不利于代码的重用
如果你是实现了JRDataSource接口,现将数据保存到list中,那么即使你采用ireport来显示数据,在其他的程序中一样的可以随时调用你的getList()方法
4.安全性考虑
越是将数据库暴露到上层,那么应用系统就越危险。
其实实现JRDataSource接口非常简单:
只要实现两个方法:
public class LedgerDataSource implements JRDataSource{
private List datas = null ;
private int loop = -1 ;
private static Logger logger = Logger.getLogger(LedgerDataSource.class.getName());
public Object getFieldValue(JRField field) throws JRException {
StatBean temp = (StatBean)this.datas.get(loop);
Object rs = "" ;
if("month".equals(field.getName())){
rs = temp.getMonth();
}else if("day".equals(field.getName())){
rs = temp.getDay();
}else if("voucherNo".equals(field.getName())){
rs = temp.getVoucherNo();
}else if("debitMoney".equals(field.getName())){
rs = temp.getDebitMoney();
}else if("creditMoney".equals(field.getName())){
rs = temp.getCreditMoney();
}else if("DOrc".equals(field.getName())){
rs = temp.getDOrc();
}else if("summary".equals(field.getName())){
rs = temp.getSummary();
}else if("balance".equals(field.getName())){
rs = temp.getBalance();
}
temp = null ;
return rs;
}
public boolean next() throws JRException {
loop ++ ;
if(loop >= datas.size()){
return false;
}else{
return true ;
}
}
public void finalized(){
datas = null ;
}
}
在使用该datasource的时候,只需要JasperPrint jasperPrint = JasperFillManager.fillReport(String,Map,JRDataSource);
[转载javason的BLOG,感谢!]
分享到:
相关推荐
本文将深入探讨如何在IReport中利用JRDataSource接口实现这一功能,并通过一个具体的案例源码分析来帮助初学者更好地理解和应用。 一、JRDataSource接口简介 JRDataSource是JasperReports库中的核心接口,用于提供...
- **实现方式**:通过实现 JRDataSource 接口,开发者可以自定义数据源,包括但不限于 XML 文件、JavaBean 集合等。 - **应用场景**:适用于非关系型数据来源,例如 XML 文档、CSV 文件、Java 对象集合等。 #### 五...
2. **实现JRDataSource**:接着,我们创建 `DailySalesDataSource` 类,它实现了 `JRDataSource` 接口。在这个类中,我们通常会将实际业务数据存储在一个集合里,然后在 `next()` 和 `getFieldValue()` 方法中进行...
2. **JRDataSource接口实现**:这是一种更灵活的数据源方式,适用于非JDBC数据,如XML文件、JavaBean集合等。扩展JRDataSource接口的Java对象允许我们直接控制数据的细节,无需通过SQL查询。例如,可以使用...
然后,定义一个ChartDataSource类,该类实现了JRDataSource接口,用于在生成图表时将数据传入。 public class ChartDataSource implements JRDataSource { private int m_nldx; private Vector<ChartDataBean> v;...
通过实现JRDataSource接口,用户可以自定义数据源。 #### 9.4 使用JavaBean作为数据源 JavaBean作为数据源使得报表设计更加面向对象。 #### 9.5 JREmptyDataSource JREmptyDataSource用于当报表不需要实际数据源时...
- 可以通过实现JRDataSource接口来创建自定义的数据源。 - 这样可以更加灵活地满足特殊需求。 **用iReport实现个性化的JRDataSource:** - iReport提供了一些工具,可以帮助用户实现自定义的数据源。 - 例如,可以...
你可以使用Java的JRDataSource接口或自定义的 JRBeanCollectionDataSource 来封装数据。 4. **编译报表模板**:在服务器端,使用JasperCompileManager将.jrxml文件编译成.jasper文件。这个过程将元数据转换为执行时...
自定义数据源可以通过实现JRDataSource接口来实现。 6. **子报表**: 子报表是嵌套在主报表中的独立报表,用于显示更复杂的数据结构。它们可以有自己的数据源和参数传递机制,也可以返回值给父报表。 7. **国际化...
// 实现JRDataSource接口的方法 // ... } ``` 这个类允许我们在报表中通过字段名引用元组中的对象,使得报表能够正确显示数据。 5. **报表分页处理** 上述示例没有涉及到分页处理,如果数据量较大,为了避免...
// 数据源可以是任何实现了JRDataSource接口的对象 // 填充报表 JasperPrint jasperPrint = JasperFillManager.fillReport(jr, parameters); // 导出报表 JasperExportManager.exportReportToPdfFile(jasperPrint...
- **JRDataSource接口**: - 实现自定义数据源。 - JavaBean数据源示例。 - XML数据源示例。 - **实现新的JRDataSource**: - 自定义数据源类。 - 集成到iReport。 #### 十一、国际化 - **...
6. **数据填充**:将数据填充到报表模板的过程,可以使用JRDataSource接口实现。对于Java对象,可以使用JRBeanCollectionDataSource,将Java集合中的对象属性映射到报表字段。 7. **运行和展示**:生成报表后,可以...
3. 数据源和自定义数据源:数据源是报表设计的关键,JasperReport支持多种数据源,包括JRDataSource接口实现的自定义数据源。在实际项目中,你可以根据需求连接数据库、CSV文件或其他数据提供者。 4. 国际化(I18N...
总之,ireport是一个强大的报表生成工具,结合jasperreports-5.6.0.jar和bjlbs-brick-1.0.jar这两个关键组件,可以在Java Web项目中实现复杂报表的设计和展示。通过熟练掌握ireport的使用,开发者可以大大提高报表...
- **数据源**:ireport 可以连接多种类型的数据源,如 JDBC、CSV、XML 或自定义数据源,通过 JRDataSource 接口与报表模板交互。 - **样式和格式化**:ireport 提供丰富的样式控制,包括字体、颜色、边框等,以及...
- **JRDataSource接口**:了解如何实现自定义的数据源。 - **JavaBean作为数据源/JavaBean的一个字段作为数据源/XML数据源**:使用JavaBean或XML文件作为数据源的方法。 - **XML和子报表**:探讨如何在子报表中使用...
`JRDataSource`接口提供了访问报表所需数据的方法,例如` JRBeanCollectionDataSource `或`JRMapCollectionDataSource`可以方便地从集合数据中创建数据源。在给定的代码中,`createReportDataSourceForOrder`方法...
5. `JRDataSource`:数据源接口,用于提供报表所需的数据。 【示例代码片段】 ```java // 加载jrxml文件 InputStream jrxmlStream = new FileInputStream("report.jrxml"); JasperDesign jasperDesign = ...