当前位置: 代码迷 >> 报表 >> JReport入门及事例(iReport)
  详细解决方案

JReport入门及事例(iReport)

热度:279   发布时间:2016-05-05 07:52:17.0
JReport入门及例子(iReport)
  • 准备工作:

1、下载JReport:http://down10b.zol.com.cn/bianchengtools/333513_ireport300.zip?key=287ff4fc316487d19e8c5537ba13d7e4

??? 图文教程下载:http://files.blogjava.net/luodaijun/ireport%E5%9B%BE%E6%96%87%E6%95%99%E7%A8%8B.zip

2、下载安装MySQL:http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/mysql-5.5.11-win32.msi

在test中建个test表,有id和name字段

3、安装JDK、eclipse,这个就不用说了吧。

  • 制作报表:

请参考 图文教程 中的操作,自己动手做出一张报表,这里我不在细说,只要展示id和name字段就行了。

保存为classic.jrxml文件,我放在E:\rpt下面。注意,这个一般放在项目目录中,以后使用相对路径,现在我使用的绝对路径,我只是测试一下,到时候要使用流来读取。

  • 编码调用报表

在eclipse中建立一个java项目

TestBean类,是一个普通bean,跟数据库中字段一样就好了,有set get方法

public class TestBean {	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	private int id;	private String name;}

?

Test类是调用的报表的类,

import java.io.File;import java.io.FileInputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.JasperCompileManager;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperReport;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.view.JasperViewer;public class Test {	/**	 * @param args	 */	public static void main(String[] args) {		try {			JasperReport jr = null;			JasperPrint jp = null;			FileInputStream fis = new FileInputStream(new File(					"E:\\rpt\\classic.jrxml"));			jr = JasperCompileManager.compileReport(fis);			Map<String, String> map = new HashMap<String, String>();			// map.put("id", "test"); //这里是传参数的 必须先在ireport 中定义好 参数			// map.put("name", "test");			JRDataSource dataSource = new JRBeanCollectionDataSource(getTest());			jp = JasperFillManager.fillReport(jr, map, dataSource);			JasperViewer.viewReport(jp);		} catch (Exception e) {			e.printStackTrace();		}	}	public static Connection getConnection() {		String driver = "com.mysql.jdbc.Driver";		String url = "jdbc:mysql://localhost/test";		String userName = "root";		String password = "root";		Connection conn = null;		try {			Class.forName(driver);			conn = DriverManager.getConnection(url, userName, password);		} catch (SQLException e) {			e.printStackTrace();		} catch (ClassNotFoundException e) {			e.printStackTrace();		}		return conn;	}	public static List<TestBean> getTest() {		List<TestBean> list = new ArrayList<TestBean>();		String sql = "select id,name from test";		Connection conn = null;		Statement stmt = null;		ResultSet rs = null;		try {			conn = getConnection();			stmt = conn.createStatement();			rs = stmt.executeQuery(sql);			while (rs.next()) {				TestBean tb = new TestBean();				tb.setId(rs.getInt("id"));				tb.setName(rs.getString("name"));				list.add(tb);			}		} catch (SQLException e) {			e.printStackTrace();		}		try {			if (rs != null) {				rs.close();			}			if (stmt != null) {				stmt.close();			}			if (conn != null) {				conn.close();			}		} catch (SQLException e) {			e.printStackTrace();		}		return list;	}}

具体代码见附件。

  • 注意事项:

1、必须使用JDK5,我刚开始使用JDK6一直报错,找不到原因,各位不要再绕弯路了

2、使用了FileInputStream来读取E:\rpt\classic.jrxml这个文件,这个是绝对路径

3、我使用了JRBeanCollectionDataSource ,报表中有自己的DataSource,我不知道怎么使用,就用JDBC写了一个。但是从项目角度考虑,我们一个项目肯定使用一个数据源,所以如果每次调用报表,都使用报表自己的数据源是不可取的,但是自己的DataSource确很好维护,直接改变SQL语句就能修改了,所以请达人告诉我怎么直接调用JReport的DataSource,不胜感激。

4、项目中所用的lib可以在ireport的软件的lib下面找到,只有MySQL的JDBC需要自己去下载驱动。

?

?