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需要自己去下载驱动。

 

 

你可能感兴趣的:(eclipse,sql,mysql,.net,jdbc)