开发者使用JasperReport——通过数据源生成报表

摘要:
前言的前两章介绍了如何查询数据库,但它们都通过报表模板与数据库交互。也就是说,我们的查询语句和参数定义都是在模板中编写的,因此有时不方便。所以今天我们将介绍如何通过Servlets与数据库交互。模板仅负责显示。主题和以前一样。我们需要以下步骤来生成报告:1.要导入jar包,请参阅静态文本报告。

前言

前两篇都是介绍了如何查询数据库,但是都是通过报表模版跟数据库进行交互的,也就是说我们的查询语句和参数的定义都写死在模版里面了,所以有时候会不太方便,所以今天就来跟大家介绍下通过Servlet与数据库进行交互,模板只负责显示。


正题

跟之前的一样,我们要生成报表需要以下几个步骤:

1.引入jar包,请看《静态文本报表》 。


2.新建报表模版:

由于我们这次是通过Servlet来与数据库交互,所以我们的报表报表里面没有了查询语句:


<?xmlversion="1.0" encoding="UTF-8"?>

<jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreportshttp://jasperreports.sourceforge.net/xsd/jasperreport.xsd"

name="JRResultReport">

<fieldname="ID" />

<fieldname="NAME" />

<fieldname="SEX" />

<pageHeader>

<bandheight="30">

<staticText>

<reportElementx="0" y="0" />

<textElementverticalAlignment="Bottom"/>

<text>Id</text>

</staticText>

<staticText>

<reportElementx="140" y="0" />

<text>Name</text>

</staticText>

<staticText>

<reportElementx="280" y="0" />

<text>Sex</text>

</staticText>

</band>

</pageHeader>

<detail>

<bandheight="30">

<textField>

<reportElementx="0" y="0" />

<textFieldExpressionclass="java.lang.Integer">

$F{ID}

</textFieldExpression>

</textField>

<textField>

<reportElementx="140" y="0" />

<textFieldExpressionclass="java.lang.String">

$F{NAME}

</textFieldExpression>

</textField>

<textField>

<reportElementx="280" y="0" />

<textFieldExpressionclass="java.lang.String">

$F{SEX}

</textFieldExpression>

</textField>

</band>

</detail>

</jasperReport>

3.编译报表模版,请看《静态文本报表》


4.编写servlet:

本实例是通过Servlet与数据库进行交互的(JRResultSetDataSource数据源),所以在servlet中建立与数据库的连接和查询语句:

packagecom.dan.servlet;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.PrintWriter;

importjava.io.StringWriter;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.Statement;

importjava.util.HashMap;

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importnet.sf.jasperreports.engine.JRResultSetDataSource;

importnet.sf.jasperreports.engine.JasperRunManager;

/**

* 使用JRResultSetDataSource填充

* @author zdd

*

*/

publicclass DbReportDSServlet extends HttpServlet {

@Override

protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)

throwsServletException, IOException {

Connectionconnection;

Statementstatement;

ResultSetresultSet;

resp.setContentType("application/pdf");

ServletOutputStreamservletOutputStream = resp.getOutputStream();

InputStreamreportStream =getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/JRResultReport.jasper");

Stringquery = "SELECT T.ID,T.NAME,T.SEX FROM T_USER T";

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

connection=DriverManager.getConnection("jdbc:oracle:thin:@192.168.24.36:1521:testreport","test","test");

statement= connection.createStatement();

resultSet= statement.executeQuery(query);

JRResultSetDataSourceresultSetDataSource = new JRResultSetDataSource(resultSet);

JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,newHashMap(),resultSetDataSource );

resultSet.close();

statement.close();

connection.close();

servletOutputStream.flush();

servletOutputStream.close();

}catch(Exceptione){

StringWriterstringWriter = new StringWriter();

PrintWriterprintWriter = new PrintWriter(stringWriter);

e.printStackTrace(printWriter);

resp.setContentType("text/plain");

resp.getOutputStream().print(stringWriter.toString());

}

}

}

5.配置web.xml,就是配置servlet。


6.运行项目

看一下我的运行结果:

开发者使用JasperReport——通过数据源生成报表第1张

小结:

其实这么多的实例都很简单,每个实例间的不同点就在于使用的方式不同,其他基本都是类似的。

免责声明:文章转载自《开发者使用JasperReport——通过数据源生成报表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sublime Text3安装配置C++ _access和_waccess的使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

weblogic 的应用链接不上数据库报异常 Caused By: weblogic.common.ResourceException: Io exception: Connection reset 错误信息表示访问数据库异常,创建链接池失败

保存信息如下: weblogic.application.ModuleException:at weblogic.jdbc.module.JDBCModule.prepare(JDBCModule.java:290)at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(Mod...

Jmeter连接mysql数据库实现参数化

前面我的随笔中记录了jmeter 如何连接mysql数据库。 连接成功后,我们可以在jmeter中进行一些数据的增,删,改,查的操作, 那么,如何把我们查询到的结果参数化呢? 1、添加JDBC request   7、JDBC Request中的Variable Name 与JDBC Connection Configuration 中Variable N...

openfire的配置

Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。所以常常被用作及时通信的后台服务器,本文将记录下其最基本的安装和配置。 1、openfire的官方网站http://www.igniterealtime.org/dow...

全网数据库大全

参考资源 数据库种类发展史和大数据下的数据库 NoSQL百度百科 NewSQL百度百科 分布式NewSQL对比——heaventouch大佬的博客 Google Spanner论文翻译——林子雨 人道浮沉的博客 列式数据库与行式数据库 Oracle数据库、MySQL数据库、SQL Server数据库 Oracle、Mysql、SQL Server比较 Mo...

Atitit php pdo的api使用 目录 1.1. PHP PDO简介 1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1 2. 其他设置 2 2.1. )、P

Atitit php pdo的api使用   目录 1.1. PHP PDO简介 1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1 2. 其他设置 2 2.1. )、PDO有三种错误处理方式:PDO::ERRMODE_EXCEPTION 2 2.2. 返回的字段名称大小写处理PDO::ATTR_CASE 2 2.3. 指定...

再谈Qt数据库的使用

谈不上什么再谈,上次匆匆的写了点数据库的博客就放下了,今天做智能家居项目要用到数据库来存储报警信息,又出现了许多问题,不得在记一下。废话少说言归正传。 如果每次收到信息跟创建数据表一样的,那么,当我们动态接受数据时不得已还要组合字符串,但最后不见得好弄,因为字符串里还要套字符串。 query.exec("create table message (设备类型...