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 > $P{hp}

]]>

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

/p>

"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

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里面设置的

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-06-02 16:52

浏览 5420

论坛回复 / 浏览 (0 / 2866)

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值