保存模板至数据库

编辑
文档创建者:印然 (67260 )     浏览次数:4540次     编辑次数:12次     最近更新:susie 于 2019-03-28     

目录:

1. 描述编辑

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

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

如下可查看,这里是已经将已有的cpt模板保存于mysql数据库中,点击我们的报表数据集,数据库查询>数据库数据集,输入SELECT * FROM REPORT,预览可看到:
222
那么,如何将cpt模板保存入库呢?以下我们详细介绍。

2. 实现步骤编辑

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

222

2.2 编写保存模板程序

在一般情况下,若您希望在FineReport设计器基础上进行二次开发,我们可以在Eclipse或idea中通过调用FineReport启动类来启动设计器,以便于开发过程中的调试和二次开发的准备。

注意需要引入FineReport设计器下的jar包,详细点击Eclipse中启动设计器

package com.fr.demo; import com.fr.base.operator.common.CommonOperator; import com.fr.chart.activator.ChartBaseActivator; import com.fr.config.activator.BaseDBActivator; import com.fr.config.activator.ConfigurationActivator; import com.fr.data.impl.config.activator.RestrictionActivator; import com.fr.env.operator.CommonOperatorImpl; import com.fr.module.Module; import com.fr.module.tool.ActivatorToolBox; import com.fr.report.ReportActivator; import com.fr.report.module.ReportBaseActivator; import com.fr.store.StateServerActivator; 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; public class SaveReportToDatabase { public static void main(String[] args) { SaveReport(); } private static void SaveReport() { try { // 定义报表运行环境,用于执行报表 Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(), new ConfigurationActivator(), new StateServerActivator(), new ReportBaseActivator(), new RestrictionActivator(), new ReportActivator(), new ChartBaseActivator()); SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl()); String envpath= "//Applications//FineReport10_325//webapps//webroot//WEB-INF"; //工程路径 SimpleWork.checkIn(envpath); module.start(); // 连接数据库 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://review.finedevelop.com:3306/susie"; String user = "root"; String pass = "ilove"; 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(envpath + "//reportlets//GettingStarted.cpt"); int lens = (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(); } finally { SimpleWork.checkOut(); } } }
注:该程序中使用了JDBC连接数据库,您需要在编写代码前先将对应数据库的驱动包加载进project中。
另:代码中需要根据你实际的报表环境路径和数据库进行修改。
另:如果数据库大小写不敏感即不区分大小写,代码无需修改;如果数据库区分大小写,则需要将表名需要加双引号,修改后insert into \"report\" values(?,?)

3. 编译运行编辑

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

附件列表


主题: 二次开发
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?只是浏览 [ 去社区提问 ]