Jaspersoft数据源之JDBC(四)

一、前言

​ 任何报表都有数据源,它是一切数据的源头。JasperSoft当然也不例外,JasperSoft中支持丰富的数据源适配器。例如常见的 Jdbc 、MongoDB、Json、JNDI,甚至也可以使用我们自定义实现 JRDataSource 都是可以的。

如下图所示,这是6.8 版本的 JasperSoft 支持的数据源适配。随着JasperSoft软件迭代,所支持的数据源越来越丰富。

Jaspersoft数据源之JDBC(四)

二、JDBC数据源

​ JasperSoft支持的数据源比较丰富,这里我们来使用常用的 JDBC 数据源来演示在Jasper模板中的使用。关于其他数据源我们也可以参考官方文档

1、创建数据源

JasperSoft的数据源有多种方式创建方式;

​ 点击 File --> 选择 DataAdapter
Jaspersoft数据源之JDBC(四)

​ 在Project Explorer区域 JasperSoft 项目上,或者任意空白处都可以Jaspersoft数据源之JDBC(四)

​ 包括我们在创建模板后,也是可以创建数据源的。顶部也提供了快速按钮。Jaspersoft数据源之JDBC(四)

2、配置数据源

选择Data Adapter ,指定数据源名称,及保存的位置。一个Jasper项目中,是可以创建多个数据源。
Jaspersoft数据源之JDBC(四)

选择 Database JDBC Connection 选项
Jaspersoft数据源之JDBC(四)
选择 Next, 配置数据源属性
Jaspersoft数据源之JDBC(四)
Jaspersoft数据源之JDBC(四)
Name : 任意名称都可以

  • JDBC Driver : 下拉选型框,选择Mysql,去除前后缀。还有一点需要注意的是,Mysql从6.x,使用了新的驱动名称 (com.mysql.cj.jdbc.Driver)
  • JDBC Url : jdbc:mysql://localhost:3306/jasper?characterEncoding=utf8&serverTimezone=UTC
  • Username : 用户名
  • Password : 密码

Driver Classpath : 我们还需要配置一下 JDBC的驱动包,可以去mvnrepository 下载
Jaspersoft数据源之JDBC(四)

3、使用数据源

配置好了Jdbc的数据源后,进一步可以使用数据源了,数据源只需要配置一次即可,可重复使用。

在创建模板的时候,就可以指定已配置的数据源文件
Jaspersoft数据源之JDBC(四)

点击 Next 会配置已查询的字段,点击Finsh 完成配置。这里选择Finsh, 还可以在后面配置。

模板创建完毕,可以使用查询语句导入 Fields
Jaspersoft数据源之JDBC(四)
Jaspersoft数据源之JDBC(四)

4、测试用例

点击OK ,完成Fileds导入。把Fileds拖入到我们的模板里面,设置字体大小,及位置,点击预览。
Jaspersoft数据源之JDBC(四)
Jaspersoft数据源之JDBC(四)
这里只是简单的查询,当遇到复杂的SQL语句的时候,可以使用动态参数Parameters 。
Jaspersoft数据源之JDBC(四)
Jaspersoft数据源之JDBC(四)

5.Java 实例

​ 前面的试例是帮助预览效果使用的,然而更多的需求是在项目中使用。

Pom.xml 基本配置,其中 jasperfonts 是自定义的字体包

<!--Jasper报表引擎-->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.9.0</version>
</dependency>
<!--Jasper 自定义字体-->
<dependency>
    <groupId>com.jasperfonts</groupId>
    <artifactId>jasperfonts</artifactId>
    <version>1.0</version>
</dependency>
<!--引入JDBC驱动包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入Mysql 驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--使用 Druid 连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.18</version>
</dependency>

需要在 application.properties 配置数据库连接

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jasper?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=123456

编码如下

@Controller
@RequestMapping("report")
public class JasperController {

    @Autowired
    private DataSource dataSource;

    @RequestMapping("/Jdbc")
    public void Jdbc(HttpServletResponse response) throws Exception {

        //1.获取编译后jasper模板文件流
        InputStream reportStream = this.getClass().getClassLoader().getResourceAsStream("Jasper/TestC.jasper");
        //2.获取输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //2.创建参数值,填充参数
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("sex", 1);
        //3.调用Jasper报表引擎
        try {
            JasperRunManager.runReportToPdfStream(reportStream, outputStream, hashMap,dataSource.getConnection());
            response.setContentType("application/pdf");
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结果预览
Jaspersoft数据源之JDBC(四)

6、总结

​ 我们可以使用JDBC数据源来填充Jasper报告,这种填充报告的方式在预览时候,所见及所得,更快的调试模板,提高效率。

上一篇:[六省联考2017] 寿司餐厅


下一篇:intel:x86架构VT虚拟化(四):x64 无痕hook/shadow walker/页面读写分离