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

JasperReport 报表在SpringMVC WEB项目中的应用(JavaBean作为数据源) 使用场景在本文中我将JasperReport应用于某业务管理系统(WEB)的综合查询页面中,用于报表展示以及PDF和EXCEL文件的导出。 使用效果如下: 模板制作在项目中使用之前,需要限制做好jasper模板。比较方便的做法是使用ireport制作模板。ireport界面ireport界面如下,我们可以新建一个A4空白页面,或者使用ireport中准备好的模板。 重要参数 Fields 直 阅读详情
分两种方法 
第一种 
1.模版 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"  
  3. "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">  
  4. <jasperReport name="DBReport">  
  5.     <parameter name="hp" class="java.lang.Integer"></parameter>   
  6.     <queryString>  
  7.         <![CDATA[ 
  8.             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} 
  9.         ]]>  
  10.     </queryString>  
  11.     <field name="marks" class="java.lang.Integer"></field>  
  12.     <field name="name" class="java.lang.String"></field>  
  13.     <field name="age" class="java.lang.Integer"></field>  
  14.     <pageHeader>  
  15.         <band height="30">  
  16.             <staticText>  
  17.                 <reportElement x="0" y="0" width="69" height="24" />  
  18.                 <text><![CDATA[marks:]]></text>  
  19.             </staticText>  
  20.               
  21.             <staticText>  
  22.                 <reportElement x="140" y="0" width="79" height="24" />  
  23.                 <text><![CDATA[name:]]></text>  
  24.             </staticText>  
  25.               
  26.             <staticText>  
  27.                 <reportElement x="280" y="0" width="69" height="24" />  
  28.                 <text><![CDATA[age:]]></text>  
  29.             </staticText>   
  30.               
  31.             <staticText>  
  32.                 <reportElement x="420" y="0" width="69" height="24" />  
  33.                 <text><![CDATA[you don't see this]]></text>  
  34.             </staticText>       
  35.         </band>  
  36.     </pageHeader>  
  37.       
  38.     <detail>  
  39.         <band height="30">  
  40.             <textField>  
  41.                 <reportElement x="0" y="0" width="69" height="24" />  
  42.                 <textFieldExpression class="java.lang.Integer">  
  43.                     <![CDATA[$F{marks}]]>  
  44.                 </textFieldExpression>  
  45.             </textField>  
  46.             <textField>  
  47.                 <reportElement x="140" y="0" width="69" height="24" />  
  48.                 <textFieldExpression class="java.lang.String">  
  49.                     <![CDATA[$F{name}]]>  
  50.                 </textFieldExpression>  
  51.             </textField>  
  52.             <textField>  
  53.                 <reportElement x="280" y="0" width="69" height="24" />  
  54.                 <textFieldExpression class="java.lang.Integer">  
  55.                     <![CDATA[$F{age}]]>  
  56.                 </textFieldExpression>  
  57.             </textField>    
  58.             <staticText>  
  59.                 <reportElement x="420" y="0" width="69" height="24" />  
  60.                 <text><![CDATA[If you don't see this, it didn't work]]></text>  
  61.             </staticText>  
  62.         </band>  
  63.     </detail>  
  64. </jasperReport>  

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

3.写Servlet调用 
Java代码   收藏代码
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6. import java.util.HashMap;  
  7.   
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletOutputStream;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. import net.sf.jasperreports.engine.JRException;  
  15. import net.sf.jasperreports.engine.JasperRunManager;  
  16.   
  17. public class DynamicCreateReportWithServlet extends HttpServlet {  
  18.   
  19.     private static final long serialVersionUID = 1L;  
  20.   
  21.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  22.             throws ServletException, IOException {  
  23.         Connection connection = null;  
  24.         //获得输出流  
  25.         ServletOutputStream servletOutputStream = response.getOutputStream();  
  26.         //获得JASPER文件的输入流,一定要知道你的文件的地方  
  27.         InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQL.jasper");  
  28.         //生成Map对象传数据  
  29.         HashMap hm =  new HashMap();  
  30.         hm.put("hp", new Integer(3));  
  31.         try {  
  32.             //连结JDBC  
  33.             Class.forName("com.mysql.jdbc.Driver");  
  34.             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");  
  35.             //生成相于的PDF输入流,这个JasperRunManager对象还有很多种方法的,这只是一种  
  36.             JasperRunManager.runReportToPdfStream(is,servletOutputStream,hm, connection);  
  37.             //设置格式  
  38.             response.setContentType("application/pdf");  
  39.             servletOutputStream.flush();  
  40.             servletOutputStream.close();  
  41.             connection.close();  
  42.         } catch (ClassNotFoundException e) {  
  43.             e.printStackTrace();  
  44.         } catch (SQLException e) {  
  45.             e.printStackTrace();  
  46.         } catch (JRException e) {  
  47.             e.printStackTrace();  
  48.         }         
  49.     }  
  50.   
  51.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  52.             throws ServletException, IOException {  
  53.         this.doGet(request, response);  
  54.     }  
  55.   
  56. }  


第二种方法 
1.这种方法JRXML文件里面不用写SQL 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"  
  3. "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">  
  4. <jasperReport name="DBReport">  
  5.     <field name="id" class="java.lang.Integer"></field>  
  6.     <field name="name" class="java.lang.String"></field>  
  7.     <field name="marks" class="java.lang.Integer"></field>  
  8.       
  9.     <pageHeader>  
  10.         <band height="30">  
  11.             <staticText>  
  12.                 <reportElement x="0" y="0" width="69" height="24" />  
  13.                 <text><![CDATA[id:]]></text>  
  14.             </staticText>  
  15.               
  16.             <staticText>  
  17.                 <reportElement x="140" y="0" width="79" height="24" />  
  18.                 <text><![CDATA[name:]]></text>  
  19.             </staticText>  
  20.               
  21.             <staticText>  
  22.                 <reportElement x="280" y="0" width="69" height="24" />  
  23.                 <text><![CDATA[marks:]]></text>  
  24.             </staticText>   
  25.               
  26.             <staticText>  
  27.                 <reportElement x="420" y="0" width="69" height="24" />  
  28.                 <text><![CDATA[you don't see this]]></text>  
  29.             </staticText>       
  30.         </band>  
  31.     </pageHeader>  
  32.       
  33.     <detail>  
  34.         <band height="30">  
  35.             <textField>  
  36.                 <reportElement x="0" y="0" width="69" height="24" />  
  37.                 <textFieldExpression class="java.lang.Integer">  
  38.                     <![CDATA[$F{id}]]>  
  39.                 </textFieldExpression>  
  40.             </textField>  
  41.             <textField>  
  42.                 <reportElement x="140" y="0" width="69" height="24" />  
  43.                 <textFieldExpression class="java.lang.String">  
  44.                     <![CDATA[$F{name}]]>  
  45.                 </textFieldExpression>  
  46.             </textField>  
  47.             <textField>  
  48.                 <reportElement x="280" y="0" width="69" height="24" />  
  49.                 <textFieldExpression class="java.lang.Integer">  
  50.                     <![CDATA[$F{marks}]]>  
  51.                 </textFieldExpression>  
  52.             </textField>    
  53.             <staticText>  
  54.                 <reportElement x="420" y="0" width="69" height="24" />  
  55.                 <text><![CDATA[If you don't see this, it didn't work]]></text>  
  56.             </staticText>  
  57.         </band>  
  58.     </detail>  
  59. </jasperReport>  

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

3.写出Servlet 
Java代码   收藏代码
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7. import java.sql.Statement;  
  8. import java.util.HashMap;  
  9.   
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.ServletOutputStream;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15.   
  16. import net.sf.jasperreports.engine.JRException;  
  17. import net.sf.jasperreports.engine.JRResultSetDataSource;  
  18. import net.sf.jasperreports.engine.JasperRunManager;  
  19.   
  20. public class DynamicCreateReportWithServletDateSource extends HttpServlet {  
  21.   
  22.     private static final long serialVersionUID = 1L;  
  23.   
  24.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  25.             throws ServletException, IOException {  
  26.         Connection connection = null;  
  27.         Statement statument = null;  
  28.         ResultSet resultSet = null;  
  29.         String sql = "select tb.name as name,tb.age as age,tbs.marks as marks from jaspertb tb join jaspertbs tbs";  
  30.         ServletOutputStream servletOutputStream = response.getOutputStream();  
  31.         InputStream is = getServletConfig().getServletContext().getResourceAsStream("report\\JasperReportSQLResult.jasper");  
  32.         try {  
  33.             Class.forName("com.mysql.jdbc.Driver");  
  34.             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jasperreportdb","root", "root");  
  35.             statument = connection.createStatement();  
  36.             resultSet = statument.executeQuery(sql);  
  37.             //这里把ResultSet封装到JRResultSetDataSource对象里面了  
  38.             JasperRunManager.runReportToPdfStream(is,servletOutputStream,new HashMap(), new JRResultSetDataSource(resultSet));  
  39.             response.setContentType("application/pdf");  
  40.             servletOutputStream.flush();  
  41.             servletOutputStream.close();  
  42.             connection.close();  
  43.         } catch (ClassNotFoundException e) {  
  44.             e.printStackTrace();  
  45.         } catch (SQLException e) {  
  46.             e.printStackTrace();  
  47.         } catch (JRException e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.     }  
  51.   
  52.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  53.             throws ServletException, IOException {  
  54.         this.doGet(request, response);  
  55.     }  
  56.   
  57. }  


注意:JRXML文件里面数据库的字段都是用$F{marks},而parameter是用$P{xxxx}表示的 

,而parameter的值都是传过去的那个HashMap里面设置的


转载自:http://langhua9527.iteye.com/blog/400435

JasperReport+iReport在WEB开发中的报表生成详解 在现代企业信息化建设中,报表作为重要的信息载体,能够直观展示关键数据和分析结果,对于管理者做出决策具有重大意义。JasperReport作为一款功能强大的开源报表工具,与iReport这款直观的报表设计器配合使用,已经成为开发人员和报表设计人员的首选方案。JasperReport是一个纯Java编写的开源报表生成库,允许用户以编程方式创建各种复杂度的报表。它不仅可以处理传统的二维表格报表,还能够制作交叉报表、图形报表等。 阅读详情

相关推荐

动态生成JasperReports报表

该小项目以编码形式实现了JaperReports的动态报表功能,以满足用户对报表的高度定制化。 使用该项目时的注意事项: 1.使用Eclipse导入该项目 2.下载JasperReports Library,将JasperReports的jar文件及其依赖jar文件放入lib目录 3.将lib目录中所有jar文件添加到build路径。 4.运行

jasperReports生成动态多级表头报表

通过上述一些基本的使用说明与演示,基本上可以满足复杂的多级表头,如果有动态列需求如根据权限判断动态的隐藏某些列,也可根据演示去实现。对于另一种通过Connection的方式执行sql的方式绑定数据源,可以自己进行尝试。然后提供一个我自己写的一个简单工具类,可以满足接口调用返回pdf或者excel文件流,如果有多sheet的excel输出可以自己根据演示代码进行实现。/*** jasperReports 导出工具类**//**

quecongcong的博客 4808

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

jasperreport 6.4.1报表动态列,以及生成导出html,可直接导入到eclipse中进行运行,包含一个完整的demo

PDF报表操作04~~使用JasperReport制作动态报表(数据库交互)案例

文章目录1. 需求2. 数据直接从数据库中获取2.1 制作模板2.1.1 创建新模板,删除不需要的Band2.1.2 配置数据连接2.1.3 读取表中属性2.1.4 模板如下2.2 编译后的.jasper放入到项目中2.3 测试代码2.3.1 Controller中添加方法2.3.1 Service添加方法2.4 效果图3. 数据从后台获取3.1. 创建模板3.1.1 创建新模板,删除不需要的Band3.1.2 创建4个field3.2. 编译后的.jasper放入到项目中3.3 修改UserContro

自学之路←_← 2203

JasperReport动态生成报表

NULL 博文链接:https://yangzc106.iteye.com/blog/929759

matlab/simulink saw谐振器仿真,基于Matlab的SAW模态耦合模型的仿真研究

第32卷 第 4 期Vol. 32 No. 4重 庆 理 工 大 学 学 报 (自然科学)Journal of Chongqing University of Technology( Natural Science)2 0 1 8年 4 月Apr. 2018doi : 10.3969/j . issn. 1674-8425(z). 2018.04.002本文引用格式 :李志鹏,马龙祥,孟旭,等•基...

weixin_36192634的博客 1386

开发者使用JasperReport——带参数查询数据库

前言 上一篇我们介绍了如何使用JasperReport来生成查询数据库的报表,今天我们在其基础上再稍进一步,那就是如何带参数查询数据库。 正题 跟上一篇一样,我们要生成报表需要以下几个步骤: 1.引入jar包,请看《静态文本报表》 。 2.新建报表模版: 由于我们这次需要带参数查询数据库(查询的是T_USER数据表),所以报表模版需要更改一下,其实只更改了一下查询语

赵丹丹 廊坊师范学院信息技术提高班 七期 3789

使用geneHapR进行基因单倍型分析(以vcf文件为例)

如下图所示,可以看到,用户需要准备的包括:基因型文件、注释文件和样本信息文件,以及后续会用的表型文件。输出的主要内容有:变异位点的可视化、单倍型网络、地理分布、表型比较和连锁不平衡热图。geneHapR的工作流程。

沉香best的博客 5941

如何使用JasperReport做动态报表

  其实这个项目是好几年的了,现在重新翻出来是因为发现网上有很多朋友提问如何采用JasperReport实现动态报表的问题。当然网上也有解决方案和例子,但不外乎采用JasperReport的Api去操作报表中的元素,从而达到运行时动态生成报表设计的目的。个人认为这不是最好的方法,主要是这些操作JasperReprot元素的api晦涩难懂,总之对于我来说是一件非常崩溃的是(如果你也有采用代码的...

bighappy1983的专栏 616

DO-178C详解:机载软件开发、验证与适航标准指南

DO-178C将软件划分为五个等级(A到E),这些等级是基于失效状态对航空器安全的影响而定。

qq_41854911的博客 2850

ros_gz_bridge__镜像__readme

Run。

1113

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

/p>"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">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 > ...

weixin_39751327的博客 194

企业数字化转型解决方案架构设计:一个五维全景视角

本文系统探讨了企业数字化转型的架构设计框架,提出五维协同模型:企业架构作为战略罗盘,业务架构聚焦价值创造,应用架构实现能力载体,数据架构提供智能燃料,技术架构奠定基础支撑。文章深入分析了各架构域的核心要素、设计原则及相互关系,并指出数字化转型需通过渐进路径,结合战略引领、技术赋能和组织变革,构建有机统一的架构体系。该框架为企业应对数字化复杂性提供了系统性方法论,强调从整体视角实现技术与业务的深度融合。

金牌架构师 1256

利用JasperReport+iReport进行Web报表开发

用JasperReport+iReport进行Web报表开发序言在很多实际的项目里,报表都是其中十分重要的组成部分,例如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表,而是拥有复杂表头的、多维的、可以在运行期从数据库中自动读取数据、可自动分页、拥有丰富的页面元素(图片,超连接等)、支持分组和交叉表、支持打印、最好还能导出到Excel或Word…...(汗L)。但是显

薛笛的专栏 10万+

BiSeNet:面向实时语义分割的双边网络

BiSeNet 系列重新定义了实时语义分割的范式“不要在速度和精度之间妥协——用架构创新,两者兼得。V1:提出双边解耦思想,启发后续大量工作;V2:通过极致轻量化,证明小模型也能高精度;V3(工业版):推动端侧 AI 落地,成为行业标准之一。如今,BiSeNet 已成为嵌入式视觉系统的默认选择,其设计理念(解耦、轻量、融合)被广泛应用于目标检测、姿态估计等领域。

浩瀚之水的专栏 268

C 语言多文件编程 : 大型程序的组织与管理

本文介绍了C语言多文件编程的核心概念与实践方法。主要内容包括:1. 多文件编程的必要性:解决单文件编程在大型项目中的维护和协作问题;2. 文件组织方式:头文件(.h)负责声明接口,源文件(.c)实现具体功能;3. 编译链接过程:分阶段编译和链接多个源文件;4. 头文件设计原则:包含接口声明、使用保护机制、保持自包含性;5. 模块化实践:通过示例展示学生信息管理系统的模块划分;6. 构建工具:介绍Makefile的编写和使用方法。文章还提供了创建静态库和动态库的指导,并强调了模块化设计、信息隐藏等软件工程原则

2503_91057718的博客 1947

JasperReport:报表概述和模板制作

JasperReport开发:JasperReport的概述以及开发流程

学习记录和总结 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用JasperReport报表工具,做出Java项目报表打印功能(一)

一:介绍 JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。JasperReport是开源的,对于开发者来说是个不错的选择。 不具体介绍JasperReport了,感兴趣的朋友可以上网查阅关于JasperReport的更多信...

exodus3的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: JasperReport学习笔记3-在浏览器生成PDF文件
下一篇: JasperReport学习笔记5-其它数据生成动态的报表(WEB)
「已注销」
博客等级 码龄16年 90粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值