若您是政府部蜂擒萏赃门等,您制作的模板cpt文件放在硬盘中,如果硬盘遇上意外,导致cpt文件丢失,后果会很严重。为了降低这个风险,我们可将确认无误的cpt揍茏壅混文件全部保存在数据库中(cpt文件即二进制数据),这样您若是硬盘遇上意外导致cpt文件丢失,也可以在查看时再将这些cpt文件(即二进制数据)从数据库中提取,从而避免发生重大损失。下面就通过填报FineReport工具来进行介绍。
工具/原料
填报FineReport工具V8.0
方法/步骤
1、如下可查看,这里是已经将已有的cpt模板保存于oracle数据库中,点击我们的报表数据集,数据库查询|数据库数据集,输入SELECT*FROMREPORT,预览可看到
2、那么,如何将cpt模板保存入库呢?以下我们详细介绍。
3、数据库表准备数据库中先建好一张report的表,表中包含两个字段cptname(字符串型)和cpt(Blob类型)。
4、编写保存模板程序packagecom.fr.demo;importjav瞢铍库祢a.io.File;足毂忍珩importjava.io.FileInputStream;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importcom.fr.base.Env;importcom.fr.base.FRContext;publicclassSaveReportToDatabase{publicstaticvoidmain(String[]args){SaveReport();}privatestaticvoidSaveReport(){try{//连接数据库Stringdriver="oracle.jdbc.driver.OracleDriver";Stringurl="jdbc:oracle:thin:@192.168.100.169:1521:orcl10g";Stringuser="temp";Stringpass="temp123";Class.forName(driver);Connectionconn=DriverManager.getConnection(url,user,pass);PreparedStatementpresmt=conn.prepareStatement("insertintoreportvalues(?,?)");//读进需要保存入库的模板文件EnvoldEnv=FRContext.getCurrentEnv();StringenvPath=oldEnv.getPath();Filecptfile=newFile(envPath+"\\reportlets\\gettingstarted.cpt");intlens=(int)cptfile.length();InputStreamins=newFileInputStream(cptfile);//将模板保存入库presmt.setString(1,"gettingstarted.cpt");//第一个字段存放模板相对路径presmt.setBinaryStream(2,ins,lens);//第二个字段存放模板文件的二进制流presmt.execute();conn.commit();presmt.close();conn.close();}catch(Exceptione){e.printStackTrace();}}}
5、注:最新的代码链接。注:该程序中使用了JDBC连接数据库,您需要在编写代码前先将对应数据库的驱动包加载进project中。
6、编译运行运行该程序,重新查看数据库中数据,便可以看到您新增的记录了。