new 一个数据源:
factory name:com.jaspersoft.ireport.examples.SampleJRDataSourceFactory(必填)
name:你的JRDataSource的路径,比如我的是:edu.pku.stu.status.bkxj.util.JDataSourceUtil(填写此项时应先在classpath中增加尼你的项目路径,但此项并不是必填的,在项目中用的时候设置成相应的JRdataSource就行了,但是factory name是必须的,否则会报错)。
优点
:Database JDBC Connection 会在整个填充过程一直占用数据库连接,而且在处理一些复杂问题时,用sql和一些简单的Java语句并不能很好的解决问题。JRdataSource只会在取数据时取得数据库连接,而非填充过程。而且后台的代码也比较容易控制
javaBean:每个报表都要配置一个相应的JavaBean,太繁琐,且不易维护。JRdataSource也没有这方面的烦恼。
我的代码:
package edu.pku.stu.status.bkxj.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
/**
* 此类自动将参数中值为null的数据转为“”
*
* @author lijf
* @see
*/
public class JDataSourceUtil implements JRDataSource {
private HashMap[] datasHm = null;
private List<HashMap> datasList = null;
private HashMap temp = null;
private int loop = -1;
// 打印多条数据
public JDataSourceUtil(HashMap[] datasHm) {
this.datasHm = datasHm;
}
// 打印多条数据
public JDataSourceUtil(List<HashMap> datasList) {
this.datasList = datasList;
}
/**
* 打印一页,一条数据时,用此构造参数
*
* @param hm
*/
public JDataSourceUtil(HashMap hm) {
this.datasList = new ArrayList<HashMap>();
datasList.add(hm);
}
public Object getFieldValue(JRField jRfield) throws JRException {
if (datasHm != null) {
temp = datasHm[loop];
} else {
temp = datasList.get(loop);
}
return temp.get(jRfield.getName()) == null ? "" : temp.get(jRfield
.getName());//过滤null值
}
public boolean next() throws JRException {
loop++;
if (datasHm != null) {
if (loop >= datasHm.length) {
return false;
} else {
return true;
}
} else {
if (loop >= datasList.size()) {
return false;
} else {
return true;
}
}
}
}
print.jsp中的使用:
<%
……………………………………
//list,reportFile 已声明
JDataSourceUtil jd = new JDataSourceUtil(list);
//windows
// PDF报表
byte bytes[] = JasperRunManager.runReportToPdf(reportFile
.getPath(), null, jd); //没有需要向报表传递的参数,所以此处第//二个参数是null
response.setContentType("application/pdf");
OutputStream output = response.getOutputStream();
output.write(bytes, 0, bytes.length);
output.flush();
output.close();
%>
有兴趣的朋友可以把声明一些JavaBean 的Jrdatasource的构造函数,也可以打印的单独写成一个方法(我当时写了一个打印一页,和打印多页的两个方法,后来项目没有用到,所以删掉了)。
分享到:
相关推荐
本文将详细讲解如何在iReport中使用JavaBean作为数据源。 首先,JavaBean是一种符合JavaBeans规范的类,通常用于封装业务逻辑和数据,便于数据的传递和处理。在iReport中使用JavaBean作为数据源,可以解决因多条...
ireport用JRDataSource作为数据源案例源码,详细介绍请移步我主页查阅博客文章。初识ireport的同学可以参考本例子动手试试。 压缩包包含内容: 1.JRDataSource实现java源文件 2.jrxml报表文件
在Java开发中,ireport是一个强大的报表工具,它允许开发者设计复杂的报表,并且能够与各种数据源进行交互。在这个场景中,我们将讨论如何利用javabean作为ireport的数据源来生成报表。首先,我们需要理解javabean和...
本知识点主要探讨的是如何在iReport中使用JavaBean作为数据源来填充表格(Table)组件。我们将深入理解这个过程,并结合提供的资源进行详细阐述。 1. **JavaBean数据源的原理** JavaBean是一种符合特定规范的Java...
【标题解析】:“ireport利用javabean做数据源实例”这一标题表明我们将探讨如何使用iReport工具,一个用于设计JasperReports报表的开源工具,通过JavaBean对象作为数据源来创建和展示报表。JavaBean是一种符合特定...
在ireport中使用javabean作为数据源,我们需要以下几个步骤: 1. **设计报表模板**: - 打开iReport,创建一个新的报表项目。 - 在设计视图中,添加所需的文本框、表格和其他元素,这些将用于展示数据。 - 定义...
4. **连接数据源**:在iReport中,你需要设置数据源以便访问JavaBean。这可以通过“Design”模式下的“Dataset and Query”选项完成。选择“JavaBean Collection”类型的数据源,然后配置Java类的全限定名以及用于...
2. **配置数据源**: 在ireport中,可以设置JavaBean数据源,指定JavaBean类名和属性映射。 3. **生成.jasper文件**: 保存并编译.jrxml文件,生成.jasper二进制模板。 4. **Java代码集成**: 在Java项目中,加载....
本实例将深入探讨如何使用ireport结合javaBean作为数据源来生成报表,帮助初学者快速掌握ireport的使用方法。 【描述】:“一看就会的实例。能够很快上手ireport” ireport因其直观的图形用户界面和强大的报表设计...
本篇文章将专注于如何在IReport中使用子报表,并结合JavaBean集合作为数据源来生成报告。 首先,理解`子报表`的概念。子报表是报表中的一个区域,它可以独立设计并重复显示主报表中的数据。这样可以将复杂报表拆分...
在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式
本教程不仅包括了基本的报表设计与数据源配置,还包含了子报表的嵌入流程及完整的源代码示例。 #### 使用 JavaBean 集合作为数据源的优势 使用 JDBC 作为数据源时,数据通常通过 SQL 查询获取,这种方式可能不够...
### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...