`

JasperReport学习笔记4-查询数据库生成动态的报表(WEB)

阅读更多
分两种方法
第一种
1.模版
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="DBReport">
	<parameter name="hp" class="java.lang.Integer"></parameter>	
	<queryString>
		<![CDATA[
			select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs on(tb.id = tbs.tbid) where tb.id > $P{hp}
		]]>
	</queryString>
	<field name="marks" class="java.lang.Integer"></field>
	<field name="name" class="java.lang.String"></field>
	<field name="age" class="java.lang.Integer"></field>
	<pageHeader>
		<band height="30">
			<staticText>
				<reportElement x="0" y="0" width="69" height="24" />
				<text><![CDATA[marks:]]></text>
			</staticText>
			
			<staticText>
				<reportElement x="140" y="0" width="79" height="24" />
				<text><![CDATA[name:]]></text>
			</staticText>
			
			<staticText>
				<reportElement x="280" y="0" width="69" height="24" />
				<text><![CDATA[age:]]></text>
			</staticText>	
			
			<staticText>
				<reportElement x="420" y="0" width="69" height="24" />
				<text><![CDATA[you don't see this]]></text>
			</staticText>		
		</band>
	</pageHeader>
	
	<detail>
		<band height="30">
			<textField>
				<reportElement x="0" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.Integer">
					<![CDATA[$F{marks}]]>
				</textFieldExpression>
			</textField>
			<textField>
				<reportElement x="140" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.String">
					<![CDATA[$F{name}]]>
				</textFieldExpression>
			</textField>
			<textField>
				<reportElement x="280" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.Integer">
					<![CDATA[$F{age}]]>
				</textFieldExpression>
			</textField>	
			<staticText>
				<reportElement x="420" y="0" width="69" height="24" />
				<text><![CDATA[If you don't see this, it didn't work]]></text>
			</staticText>
		</band>
	</detail>
</jasperReport>

2.把上面的JRXML文件生成JASPER文件,方便在WEB里面的调用(可以用下面的方法先生成好,放到你知道的文件夹下面)
JasperCompileManager.compileReportToFile("WebRoot\\report\\JasperReportSQL.xml","WebRoot\\report\\JasperReportSQL.jasper");

3.写Servlet调用
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

public class DynamicCreateReportWithServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Connection connection = null;
		//获得输出流
		ServletOutputStream servletOutputStream = response.getOutputStream();
		//获得JASPER文件的输入流,一定要知道你的文件的地方
		InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQL.jasper");
		//生成Map对象传数据
		HashMap hm =  new HashMap();
		hm.put("hp", new Integer(3));
		try {
			//连结JDBC
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");
			//生成相于的PDF输入流,这个JasperRunManager对象还有很多种方法的,这只是一种
			JasperRunManager.runReportToPdfStream(is,servletOutputStream,hm, connection);
			//设置格式
			response.setContentType("application/pdf");
			servletOutputStream.flush();
			servletOutputStream.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (JRException e) {
			e.printStackTrace();
		}		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}


第二种方法
1.这种方法JRXML文件里面不用写SQL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="DBReport">
	<field name="id" class="java.lang.Integer"></field>
	<field name="name" class="java.lang.String"></field>
	<field name="marks" class="java.lang.Integer"></field>
	
	<pageHeader>
		<band height="30">
			<staticText>
				<reportElement x="0" y="0" width="69" height="24" />
				<text><![CDATA[id:]]></text>
			</staticText>
			
			<staticText>
				<reportElement x="140" y="0" width="79" height="24" />
				<text><![CDATA[name:]]></text>
			</staticText>
			
			<staticText>
				<reportElement x="280" y="0" width="69" height="24" />
				<text><![CDATA[marks:]]></text>
			</staticText>	
			
			<staticText>
				<reportElement x="420" y="0" width="69" height="24" />
				<text><![CDATA[you don't see this]]></text>
			</staticText>		
		</band>
	</pageHeader>
	
	<detail>
		<band height="30">
			<textField>
				<reportElement x="0" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.Integer">
					<![CDATA[$F{id}]]>
				</textFieldExpression>
			</textField>
			<textField>
				<reportElement x="140" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.String">
					<![CDATA[$F{name}]]>
				</textFieldExpression>
			</textField>
			<textField>
				<reportElement x="280" y="0" width="69" height="24" />
				<textFieldExpression class="java.lang.Integer">
					<![CDATA[$F{marks}]]>
				</textFieldExpression>
			</textField>	
			<staticText>
				<reportElement x="420" y="0" width="69" height="24" />
				<text><![CDATA[If you don't see this, it didn't work]]></text>
			</staticText>
		</band>
	</detail>
</jasperReport>

2.同样是用下面的方法生成JASPER文件
	    	JasperCompileManager.compileReportToFile("WebRoot\\report\\JasperReportSQLResult.xml","WebRoot\\report\\JasperReportSQLResult.jasper");


3.写出Servlet

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperRunManager;

public class DynamicCreateReportWithServletDateSource extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Connection connection = null;
		Statement statument = null;
		ResultSet resultSet = null;
		String sql = "select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs";
		ServletOutputStream servletOutputStream = response.getOutputStream();
		InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQLResult.jasper");
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");
			statument = connection.createStatement();
			resultSet = statument.executeQuery(sql);
			//这里把ResultSet封装到JRResultSetDataSource对象里面了
			JasperRunManager.runReportToPdfStream(is,servletOutputStream,new HashMap(), new JRResultSetDataSource(resultSet));
			response.setContentType("application/pdf");
			servletOutputStream.flush();
			servletOutputStream.close();
			connection.close();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (JRException e) {
			e.printStackTrace();
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}



注意:JRXML文件里面数据库的字段都是用$F{marks},而parameter是用$P{xxxx}表示的
,而parameter的值都是传过去的那个HashMap里面设置的
分享到:
评论

相关推荐

    JasperReport动态生成报表

    **JasperReport动态生成报表** JasperReport是一款强大的开源报表工具,主要用于生成各种复杂的静态和动态报表。它基于Java,可以很好地与Java应用程序、Web应用和企业级应用集成,提供丰富的报表设计和灵活的数据...

    jasperreport 6.4.1报表动态列,以及生成导出html

    3. **加载数据源**:将数据库查询结果或其他数据结构绑定到报表,确保数据能够驱动动态列的生成。 4. **生成HTML导出**:在Java代码中,通过`JasperExportManager`的`exportReportToHtmlFile`方法,设置导出参数并...

    iReport&JasperReport学习教程--内含四套(PDF版)

    《JasperReport.pdf》可能是JasperReports的综合教程,涵盖了报表设计、数据处理、动态内容生成等多个方面。它可能会详细介绍JasperReports的各种高级特性,如脚本语言的支持、参数化报表、自定义函数和复杂的过滤...

    iReport+jasperReport之客户端打印 ----数字签名

    ### iReport + JasperReport 客户端打印与数字签名详解 #### 一、概述 iReport 是一个用于设计 JasperReports 报告模板的图形界面工具,而 JasperReports 则是一款非常流行的 Java 报告工具,它能够从各种数据源...

    JasperReport使用手册 - JasperReport - 软件开发 - 深度开源.html

    是一款报表打印组件,是开放源代码组织 中的一个 报表打印工程, JasperReport sf.net 由于 本身并未提供很好的可视化报表设计工具, JasperReport 在之后推出了 iReport ,作为 报表模版编辑软件,具有以下突出的...

    jasperreport生成多种格式的报表

    jasperreport生成多种格式的报表 Jasperreport是一种流行的报表生成工具,能够生成多种格式的报表,包括PDF、HTML、RTF、XML、EXCEL等格式的报表。以下是使用Jasperreport生成多种格式的报表的详细知识点: 一、...

    jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码

    报表可以通过SQL查询动态获取数据,也可以使用JavaBeans或其他自定义数据提供者。 3. **多格式输出**:jasperreport的强大之处在于其能够将同一份报表导出为不同的格式,满足不同应用场景的需求。例如,PDF适合打印...

    jasperreport 三级(父-子-孙)关联报表 Demo V4.7.0

    使用ireport jasperreport 三级(父-子-孙)关联报表的制作和输出,版本号4.7.0,直接导入eclipse即可。 依次选择: File &gt; import &gt; General &gt; Existing Projects into Workspace &gt; Select archive file &gt;压缩包。

    JasperReport动态报表归并行数据

    **标题:“JasperReport动态报表归并行数据”** **正文:** JasperReport是一款强大的开源报表工具,它允许开发者创建复杂、美观的报表,并且支持动态数据处理。在“JasperReport动态报表归并行数据”这个主题中,...

    jasperreport4.0.2包+ireport 4.0.2 报表

    JasperReport是核心库,它允许开发者创建复杂的报表布局,支持多种数据源,如数据库连接、CSV文件、XML数据等。在4.0.2版本中,JasperReport可能已经包含了对各种图表类型的支持,如条形图、饼图、线图,以及复杂的...

    jasperReport笔记

    - 数据库查询报表:从SQL查询结果生成报表。 - CSV数据源报表:直接读取CSV文件生成报表。 - 多数据源报表:结合多个数据库或其他数据源生成复杂报表。 - 图形报表:使用内置的JFreeChart库创建各种图表。 通过...

    JasperReports数据库查询父子报表模板

    **JasperReports数据库查询父子报表模板** JasperReports是一款强大的开源报表工具,广泛应用于Java环境中,用于生成静态或动态的报告。在这个主题中,我们主要探讨如何使用JasperReports实现数据库查询并创建父子...

    Jasperreport+ireport学习笔记4

    4. **生成子报表文件**:完成设计后,编译并保存子报表为`.jasper`文件,如`subreport.jasper`。 #### 创建主报表(Master Report) 1. **数据准备**:利用iReport的ReportWizard创建主报表,设置SQL查询`SELECT *...

    JasperReport+Servlet Web应用之:打印预览

    - 使用`JasperFillManager.fillReport()`方法填充数据到JasperReport对象,数据可以从数据库查询、Java集合或其它数据源获取。 - `JasperExportManager.exportReportToPdf()`方法将报告导出为PDF格式,适合打印...

    jasperreport-2.0.5-project.zip

    JasperReports是一款强大的开源Java报表库,版本2.0.5是其历史版本之一,它为开发者提供了生成XML格式报表的能力,便于在Java Web应用程序中无缝集成。这款插件以其灵活性和易用性著称,尤其在与iReport——一个直观...

    iReport 和 Jasperreport整合开发web报表向导

    设计完成后,将jrxml文件部署到Web应用服务器,与Java代码结合,通过Jasperreport API动态生成报表。在Servlet或JSP中调用报表引擎,传入数据和参数,即可在Web页面上显示报表。 9. **高级特性** - **交互式报表*...

    iReport 和 Jasperreport整合开发web报表向导2.doc

    - **字段(Fields)**:在 "Report fields" 中设置,对应数据库查询结果的列。这些元素在报表中通过特定语法引用,如 $V{variablesName},$P{parameterName},$F{fieldsName}。 7. **自定义字体**: 若要使用非...

    JasperReport 水晶报表

    JasperReport是一款开源的报表工具,广泛应用于Java环境中,为开发者提供了设计、生成和展示复杂报表的功能。它以其灵活性、强大的数据处理能力和丰富的图表选项而备受赞誉。水晶报表(Crystal Reports)是另一款...

    jasperreport 生成pdf实现下载与打印

    这通常涉及到填充数据源(如数据库查询结果)到报表中,生成一个`.jasper`编译后的模板。 3. **Servlet生成PDF**:接着,通过Servlet来处理HTTP请求,将`.jasper`模板和数据结合,生成PDF文档。Servlet是Java Web...

    JasperReport iReport 集成到web应用操作说明

    ### JasperReport iReport 集成到Web应用操作说明 ...以上步骤展示了如何使用 iReport 设计报表模板,并通过 JasperReport 在 Web 应用中生成报表。这对于开发具备复杂报表功能的 Web 应用非常有用。

Global site tag (gtag.js) - Google Analytics