前几章介绍了以实体类作为报表数据源进行输出的案例,这一章讲解现在常用的报表数据源,那就是数据库,以Mysql数据库作为数据库工具。

下载安装Mysql与Mysql workbench

下载好后,直接安装。安装过程中会设置root的密码,一定要记住这个密码,后面要用到。

mysql电商表设计 mysql报表设计_数据库


安装完成后,再下载一个数据库可视化操作工具,MySql workbench,下载地址。

下载完成后,打开workbench,新建一个叫sample的数据库,里面新建一个student的表,里面随便设置一些学生的成绩数据。

mysql电商表设计 mysql报表设计_数据库_02


mysql电商表设计 mysql报表设计_数据_03


mysql电商表设计 mysql报表设计_数据_04

创建学生成绩数据表

sample数据库建好之后,新建一个student表。

mysql电商表设计 mysql报表设计_Jasperreport+studio_05


mysql电商表设计 mysql报表设计_mysql电商表设计_06


创建字段,数据结构如下。

mysql电商表设计 mysql报表设计_sql_07


输入学生的各科成绩与信息

mysql电商表设计 mysql报表设计_Jasperreport+studio_08

在模板配置数据库作为数据源

创建一个数据源适配表

mysql电商表设计 mysql报表设计_数据_09


选择DATABASE JDBC Connection

mysql电商表设计 mysql报表设计_Jasperreport+studio_10


选择驱动类型为Mysql

mysql电商表设计 mysql报表设计_Jasperreport+studio_11


输入连接Mysql数据的账号与密码,root是刚才创建学生表数据的帐号。

mysql电商表设计 mysql报表设计_sql_12


点击测试后,弹出错误对话框,说找不到这个驱动类。

mysql电商表设计 mysql报表设计_数据库_13


这是因为我们还没设定数据库连接驱动类的路径。驱动类可以去官网下载,地址。

我前几章提供的jar依赖包里就有这个类,添加路径依赖。

mysql电商表设计 mysql报表设计_mysql电商表设计_14


添加后再点test,依然出了错。这次是因为我们没有设置时区,所以数据库没有办法识别时间。

mysql电商表设计 mysql报表设计_数据库_15


只须将jdbc url:后面加一句时区即可

jdbc:mysql://localhost/sample?serverTimezone=GMT%2b8
  • 1

mysql电商表设计 mysql报表设计_数据_16


这次再来test,结果successful,说明mysql数据库成功连接上了。

mysql电商表设计 mysql报表设计_sql_17


点击Finish,数据源算配置好了。

将数据库学生表字段配置到模块中

在outline中右键模板,选择dataset and query

mysql电商表设计 mysql报表设计_Jasperreport+studio_18


选择我们刚才创建的数据源适配。

mysql电商表设计 mysql报表设计_sql_19


这时可以看到localhost里mysql所有的数据库

mysql电商表设计 mysql报表设计_数据_20


到这一步,如果想拖动字段至右边是无效果,右边的那个框是用来写查询语句的,这是必不要少的。

mysql电商表设计 mysql报表设计_数据_21


完成之后,可以在Field看到数据库的字段,接下来只要将它们拖动到对应的位置即可。

mysql电商表设计 mysql报表设计_mysql电商表设计_22


查看预览,生成了五个表格,数据库有几条数据,对应就生成了几个表格。

mysql电商表设计 mysql报表设计_Jasperreport+studio_23


mysql电商表设计 mysql报表设计_数据库_24

Java工程生成数据库作为数据填充的报表

首先,自然是将我们的模板编译成二进制文件,放入Java工程中。

mysql电商表设计 mysql报表设计_mysql电商表设计_25


代码如下,附有详细说明。这里注意一点,模板并不提供数据库的连接,模板文件只提供了一条查询语句而已,实际的查询数据库还是得在代码中完成的。

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

public class JasperMysqlDataTest {
    public static void main(String[] args) {

        try {
            // 1.设定模板二进制文件路径,一定要可以通过该路径找到该文件
            String reportPath = "./src/JasperMysqlSample.jasper";

            // 2.创建一个map,里面不放置任何数据,只是作为一个参数
            HashMap<String, Object> map = new HashMap<>();
            // 3.创建一个connection,作为填充参数传入。
            // url,模板中连接的url,复制过来即可
            String url = "jdbc:mysql://localhost/sample?serverTimezone=GMT%2b8";
            // 我们的驱动类,要在依赖包中放置这个驱动包

            Class.forName("com.mysql.jdbc.Driver");
            // 关键的一步,创建一个连接对象,要设置账号和密码
            Connection conn = DriverManager.getConnection(url, "root", "password");
            // 4.通过JasperFillManager工具进行填充报表,填充成功后会生成一个JasperPring文件,该文件用于输出
            JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, map, conn);
            // 5.设定目标文件输出的路径
            String desFilePath = "./src/JasperMysqlTest.html";
            // 6.通过JasperExportManager管理工具进行报表输出文档,此外设定为输出html文件
            JasperExportManager.exportReportToHtmlFile(jasperPrint, desFilePath);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("发生了错误");
            e.printStackTrace();
        }
    }
}

刷新工程,生成了一个html文件,预览,与数据库数据一致,大功告成。

mysql电商表设计 mysql报表设计_mysql电商表设计_26


mysql电商表设计 mysql报表设计_sql_27