历史版本9 :保存模板至数据库 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

若您是政府部门等,您制作的模板cpt文件放在硬盘中,如果硬盘遇上意外,导致cpt文件丢失,后果会很严重。

为了降低这个风险,我们可将确认无误的cpt文件全部保存在数据库中(cpt文件即二进制数据),这样您若是硬盘遇上意外导致cpt文件丢失,也可以在查看时再将这些cpt文件(即二进制数据)从数据库中提取,从而避免发生重大损失。

如下可查看,这里是已经将已有的cpt模板保存于mysql数据库中,点击我们的报表数据集,数据库查询>数据库数据集,输入SELECT * FROM REPORT,预览可看到

222

那么,如何将cpt模板保存入库呢?以下我们详细介绍。

2. 实现步骤编辑

2.1 数据库表准备
数据库中先建好一张report的表,表中包含两个字段 cptname(字符串型)和 cpt(Blob类型)。

222
2.2 编写保存模板程序
package com.fr.demo;
import com.fr.stable.StableUtils;
import com.fr.workspace.simple.SimpleWork;
import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;


publicclass SaveReportToDatabase {

    publicstaticvoid main(String[] args) {

        SaveReport();

    }


    privatestaticvoid SaveReport() {

        try {

            // 定义报表运行环境,才能执行报表(根据你实际报表环境路径进行修改)

            String envpath = "C:\\FineReport_10.0\\webapps\\webroot\\WEB-INF";

            SimpleWork.checkIn(envpath);

            // 连接数据库(根据你实际数据库信息进行修改)

            String driver = "com.mysql.jdbc.Driver";

            String url = "jdbc:mysql://112.124.109.239:3306/yourdatabase";

            String user = "yourusername";

            String pass = "yourpassword";

            Class.forName(driver);

            Connection conn = DriverManager.getConnection(url, user, pass); //注意表名是否区分大小写

            conn.setAutoCommit(false);

            PreparedStatement presmt = conn

                    .prepareStatement("insert into report values(?,?)");

            // 读进需要保存入库的模板文件

            File cptfile = new File(StableUtils.pathJoin(envpath, "reportlets/GettingStarted.cpt"));

            intlens = (int) cptfile.length();

            InputStream ins = new FileInputStream(cptfile);

            // 将模板保存入库

            presmt.setString(1, "GettingStarted.cpt"); // 第一个字段存放模板相对路径

            presmt.setBinaryStream(2, ins, lens); // 第二个字段存放模板文件的二进制流

            presmt.execute();

            conn.commit();

            presmt.close();

            conn.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

在编译该程序之前,需要在Eclipse编译器中导入finereport包,详细可查看Eclipse中启动设计器
注:该程序中使用了JDBC连接数据库,您需要在编写代码前先将对应数据库的驱动包加载进project中。
另:代码中需要根据你实际的报表环境路径和数据库进行修改。
另:如果数据库大小写不敏感即不区分大小写,代码无需修改;如果数据库区分大小写,则需要将表名需要加双引号,修改后insert into \"report\" values(?,?)

3. 编译运行编辑

运行编译好的程序,重新查看数据库中数据,便可以看到您新增的记录了。