`

实现ireport的JRDataSource接口

阅读更多

在使用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用list作为数据源.zip

    本文将深入探讨如何在IReport中利用JRDataSource接口实现这一功能,并通过一个具体的案例源码分析来帮助初学者更好地理解和应用。 一、JRDataSource接口简介 JRDataSource是JasperReports库中的核心接口,用于提供...

    ireport数据源文档

    - **实现方式**:通过实现 JRDataSource 接口,开发者可以自定义数据源,包括但不限于 XML 文件、JavaBean 集合等。 - **应用场景**:适用于非关系型数据来源,例如 XML 文档、CSV 文件、Java 对象集合等。 #### 五...

    ireport利用javabean做数据源.docx

    2. **实现JRDataSource**:接着,我们创建 `DailySalesDataSource` 类,它实现了 `JRDataSource` 接口。在这个类中,我们通常会将实际业务数据存储在一个集合里,然后在 `next()` 和 `getFieldValue()` 方法中进行...

    ireport数据源

    2. **JRDataSource接口实现**:这是一种更灵活的数据源方式,适用于非JDBC数据,如XML文件、JavaBean集合等。扩展JRDataSource接口的Java对象允许我们直接控制数据的细节,无需通过SQL查询。例如,可以使用...

    iReport+JasperReport柱状图

    然后,定义一个ChartDataSource类,该类实现了JRDataSource接口,用于在生成图表时将数据传入。 public class ChartDataSource implements JRDataSource { private int m_nldx; private Vector<ChartDataBean> v;...

    iReport中文教程(目前最全的)

    通过实现JRDataSource接口,用户可以自定义数据源。 #### 9.4 使用JavaBean作为数据源 JavaBean作为数据源使得报表设计更加面向对象。 #### 9.5 JREmptyDataSource JREmptyDataSource用于当报表不需要实际数据源时...

    IReport中文教程

    - 可以通过实现JRDataSource接口来创建自定义的数据源。 - 这样可以更加灵活地满足特殊需求。 **用iReport实现个性化的JRDataSource:** - iReport提供了一些工具,可以帮助用户实现自定义的数据源。 - 例如,可以...

    springMVC+ireport导出excl

    你可以使用Java的JRDataSource接口或自定义的 JRBeanCollectionDataSource 来封装数据。 4. **编译报表模板**:在服务器端,使用JasperCompileManager将.jrxml文件编译成.jasper文件。这个过程将元数据转换为执行时...

    iReport开发文档

    自定义数据源可以通过实现JRDataSource接口来实现。 6. **子报表**: 子报表是嵌套在主报表中的独立报表,用于显示更复杂的数据结构。它们可以有自己的数据源和参数传递机制,也可以返回值给父报表。 7. **国际化...

    java Hibernate ireport jsperreport 制作报表

    // 实现JRDataSource接口的方法 // ... } ``` 这个类允许我们在报表中通过字段名引用元组中的对象,使得报表能够正确显示数据。 5. **报表分页处理** 上述示例没有涉及到分页处理,如果数据量较大,为了避免...

    ireport + jasper的使用

    // 数据源可以是任何实现了JRDataSource接口的对象 // 填充报表 JasperPrint jasperPrint = JasperFillManager.fillReport(jr, parameters); // 导出报表 JasperExportManager.exportReportToPdfFile(jasperPrint...

    ireport操作手册(中文).pdf

    - **JRDataSource接口**: - 实现自定义数据源。 - JavaBean数据源示例。 - XML数据源示例。 - **实现新的JRDataSource**: - 自定义数据源类。 - 集成到iReport。 #### 十一、国际化 - **...

    ireport制作报表小例子(java)

    6. **数据填充**:将数据填充到报表模板的过程,可以使用JRDataSource接口实现。对于Java对象,可以使用JRBeanCollectionDataSource,将Java集合中的对象属性映射到报表字段。 7. **运行和展示**:生成报表后,可以...

    Jasperreport+ireport 实践操作及web应用

    3. 数据源和自定义数据源:数据源是报表设计的关键,JasperReport支持多种数据源,包括JRDataSource接口实现的自定义数据源。在实际项目中,你可以根据需求连接数据库、CSV文件或其他数据提供者。 4. 国际化(I18N...

    ireport.zip

    总之,ireport是一个强大的报表生成工具,结合jasperreports-5.6.0.jar和bjlbs-brick-1.0.jar这两个关键组件,可以在Java Web项目中实现复杂报表的设计和展示。通过熟练掌握ireport的使用,开发者可以大大提高报表...

    ireport 技术总结

    - **数据源**:ireport 可以连接多种类型的数据源,如 JDBC、CSV、XML 或自定义数据源,通过 JRDataSource 接口与报表模板交互。 - **样式和格式化**:ireport 提供丰富的样式控制,包括字体、颜色、边框等,以及...

    iReport技术手册

    - **JRDataSource接口**:了解如何实现自定义的数据源。 - **JavaBean作为数据源/JavaBean的一个字段作为数据源/XML数据源**:使用JavaBean或XML文件作为数据源的方法。 - **XML和子报表**:探讨如何在子报表中使用...

    Ireport开发经验总结

    `JRDataSource`接口提供了访问报表所需数据的方法,例如` JRBeanCollectionDataSource `或`JRMapCollectionDataSource`可以方便地从集合数据中创建数据源。在给定的代码中,`createReportDataSourceForOrder`方法...

    利用Jasperreport+IReport进行报表开发

    5. `JRDataSource`:数据源接口,用于提供报表所需的数据。 【示例代码片段】 ```java // 加载jrxml文件 InputStream jrxmlStream = new FileInputStream("report.jrxml"); JasperDesign jasperDesign = ...

Global site tag (gtag.js) - Google Analytics