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

来源:互联网 发布:js 字符串数组排序 编辑:程序博客网 时间:2024/06/05 09:48

前言

上一篇我们介绍了如何使用JasperReport来生成简单的文本报表,还有如何将报表输出到web页面上,今天我们继续讲解查询数据库的报表。

 

正题

跟上一篇一样,我们要生成报表需要以下几个步骤:


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


2.新建报表模版:

由于我们这次需要查询数据库(查询的是T_USER数据表),所以报表模版需要更改一下:

<?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="SecondReport">

<queryString>

<![CDATA[SELECT* FROM T_USER]]>

</queryString>

<fieldname="ID" class="java.lang.Integer"/>

<fieldname="NAME" class="java.lang.String"/>

<fieldname="SEX" class="java.lang.String"/>

 

<pageHeader>

<bandheight="30">

<staticText>

<reportElementx="0" y="0" width="69" height="24"/>

<textElementverticalAlignment="Bottom"/>

<text>Id</text>

</staticText>

<staticText>

<reportElementx="140" y="0" width="79" height="24"/>

<text>Name</text>

</staticText>

<staticText>

<reportElementx="280" y="0" width="69" height="24"/>

<text>Sex</text>

</staticText>

</band>

</pageHeader>

<detail>

<bandheight="30">

<textField>

<reportElementx="0" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.Integer">

$F{ID}

</textFieldExpression>

</textField>

<textField>

<reportElementx="140" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.String">

$F{NAME}

</textFieldExpression>

</textField>

<textField>

<reportElementx="280" y="0" width="69" height="24"/>

<textFieldExpressionclass="java.lang.String">

$F{SEX}

</textFieldExpression>

</textField>                        

</band>

</detail>

</jasperReport>

 

注:

1.<queryString>标签里面放置你的查询语句,到时候会直接执行。

2.<field>标签是与你的数据表的字段相对应的,还有数据类型。

3.<pageHeader>标签就是页面的标题,里面放置的都是字符串,所以使用<staticText>

4.<detail>标签是用来放置具体的查询记录的

5.<band>标签是比较灵活的,有点儿类似于div标签

6.<reportElement>是对于文本定位的,例如定位文本的位置和高度。

7.<textFieldExpression>是用来放置显示的字段的

 

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


4.编写servlet:

由于我们需要查询数据库,所以我们需要在servlet中建立于数据库的连接:

packagecom.dan.servlet;

 

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.PrintWriter;

importjava.io.StringWriter;

importjava.sql.Connection;

importjava.sql.DriverManager;

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.JREmptyDataSource;

importnet.sf.jasperreports.engine.JRException;

importnet.sf.jasperreports.engine.JasperRunManager;

 

/**

 * 查询数据库

 * @author zdd

 *

 */

publicclass DbReportServlet extends HttpServlet {

 

/**

 *

 */

privatestatic final long serialVersionUID = 2174316885912562306L;

 

@Override

protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)

throwsServletException, IOException {

Connectionconnection;

resp.setContentType("application/pdf");

 

ServletOutputStreamservletOutputStream = resp.getOutputStream();

 

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

try{

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

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

 

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

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简单的应用,我们知道了这些基本的用法后,就可以以后对其进行封装,后面还会讲解不同的数据源以及同时查询两张数据源的报表的应用。

 

 

 

原创粉丝点击