历史版本1 :保存模板至数据库 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:
若您是政府部门等,您制作的模板cpt文件放在硬盘中,如果硬盘遇上意外,导致cpt文件丢失,后果会很严重。为了降低这个风险,我们可将确认无误的cpt文件全部保存在数据库中(cpt文件即二进制数据),这样您若是硬盘遇上意外导致cpt文件丢失,也可以在查看时再将这些cpt文件(即二进制数据)从数据库中提取,从而避免发生重大损失。
如下可查看,这里是已经将已有的cpt模板保存于oracle数据库中,点击我们的报表数据集,数据库查询|数据库数据集,输入SELECT * FROM REPORT,预览可看到
那么,如何将cpt模板保存入库呢?以下我们详细介绍。

1. 实现步骤编辑

1.1 数据库表准备
数据库中先建好一张report的表,表中包含两个字段 cptname(字符串型)和 cpt(Blob类型)。
1.2 编写保存模板程序
HTML/XML代码
package com.fr.demo;    
  
import java.io.File;    
import java.io.FileInputStream;    
import java.io.InputStream;    
import java.sql.Connection;    
import java.sql.DriverManager;    
import java.sql.PreparedStatement;  
import com.fr.base.Env;  
import com.fr.base.FRContext;    
  
public class SaveReportToDatabase {    
    public static void main(String[] args) {    
        SaveReport();    
    }    
    private static void SaveReport() {    
        try {    
            // 连接数据库    
            String driver = "oracle.jdbc.driver.OracleDriver";    
            String url = "jdbc:oracle:thin:@192.168.100.169:1521:orcl10g";    
            String user = "temp";    
            String pass = "temp123";    
            Class.forName(driver);    
            Connection conn = DriverManager.getConnection(url, user, pass);    
            PreparedStatement presmt = conn    
                    .prepareStatement("insert into report values(?,?)");    
            // 读进需要保存入库的模板文件    
            Env oldEnv = FRContext.getCurrentEnv();    
            String envPath = oldEnv.getPath();    
            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();    
        }    
    }    
}  
注:最新的代码链接fine-help
注:该程序中使用了JDBC连接数据库,您需要在编写代码前先将对应数据库的驱动包加载进project中。

2. 编译运行编辑

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