1. 描述编辑
若您是政府部门等,您制作的模板cpt文件放在硬盘中,如果硬盘遇上意外,导致cpt文件丢失,后果会很严重。
为了降低这个风险,我们可将确认无误的cpt文件全部保存在数据库中(cpt文件即二进制数据),这样您若是硬盘遇上意外导致cpt文件丢失,也可以在查看时再将这些cpt文件(即二进制数据)从数据库中提取,从而避免发生重大损失。
2. 实现步骤编辑
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();
}
}
}
另:代码中需要根据你实际的报表环境路径和数据库进行修改。
另:如果数据库大小写不敏感即不区分大小写,代码无需修改;如果数据库区分大小写,则需要将表名需要加双引号,修改后insert into \"report\" values(?,?)