反饋已提交
網絡繁忙
一般製作的範本檔案都放在硬碟中,如果硬碟損壞,就會導致檔案丟失,後果會很嚴重。為了降低這個風險,我們可將範本檔案全部儲存在資料庫中(二進制資料),這樣若是硬碟損壞導致檔案丟失,也可以將資料庫中的備份檔案取出,進而避免發生重大損失。
如下圖所示,這裏是已經將 cpt 範本儲存於 MySQL 資料庫中,點選查詢即可看到儲存的二進制檔案。那麼,如何將 cpt 範本儲存入庫呢?
通程式式讀取報表後將其提交入庫。
以下範例讀取內建範本 GettingStarted.cpt 後將其儲存在資料庫表 report 中。
資料庫中先建好一張 report 表,表中包含兩個欄位 cptname(字串型)和 cpt(二進制資料類型)。如下圖所示,在MySQL 資料庫中建立表 report。
編譯程式前,需先建立一個 Java 工程環境,並且需要一個 Java 編輯器,如 Eclipse 或 idea 。
在編輯器工程中匯入 FineReport 工程 JAR 包。包括使用者自己報表工程
%FR_HOME%/lib下的所有的包,
%FR_HOME%/server/lib 下的所有包,
%FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包;
程式碼中會將範本資訊入庫,還需要匯入對應的 JDBC 驅動,
還要引入 JDK 下的 tools.jar。詳細操作可參考:編譯Java程式
在編輯器中編寫 Java 程式 SaveReportToDatabase.java,即讀取內建範本 GettingStarted.cpt 後將其儲存在資料庫表 report 中。完整程式碼可參見:
注1:該程式中使用了 JDBC 連結資料庫,2.2 節匯入 JAR 包時需要將對應的資料庫的驅動包匯入工程中。
注2:使用者使用時,注意將範例程式碼中的工程路徑、範本名稱使用者自己工程下的;資料庫連結資訊取代為使用者準備好的資料庫。
注3:如果資料庫大小寫不敏感即不區分大小寫,程式碼無需修改;如果資料庫區分大小寫,則需要將表名需要加雙引號,修改後 insert into \"report\" values(?,?)
package com.fr.demo;import com.fr.base.operator.common.CommonOperator;import com.fr.chart.activator.ChartBaseActivator;import com.fr.cluster.engine.activator.standalone.StandaloneModeActivator;import com.fr.config.activator.BaseDBActivator;import com.fr.config.activator.ConfigurationActivator;import com.fr.env.operator.CommonOperatorImpl;import com.fr.general.I18nResource;import com.fr.health.activator.ModuleHealActivator;import com.fr.io.ResourceRepositoryActivator;import com.fr.module.Module;import com.fr.module.tool.ActivatorToolBox;import com.fr.report.ReportActivator;import com.fr.report.RestrictionActivator;import com.fr.report.module.ReportBaseActivator;import com.fr.report.write.WriteActivator;import com.fr.scheduler.SchedulerActivator;import com.fr.store.StateServiceActivator;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 ResourceRepositoryActivator(), new StandaloneModeActivator(), new ModuleHealActivator(), new StateServiceActivator(), new ChartBaseActivator(), new SchedulerActivator(), new ReportBaseActivator(), new RestrictionActivator(), new ReportActivator(), new WriteActivator()); SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl()); String envpath = "//Applications//FineReport10_325//webapps//webroot//WEB-INF";//工程路徑 SimpleWork.checkIn(envpath); I18nResource.getInstance(); module.start(); // 連結資料庫 String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://review.finedevelop.com:3306/susie"; String user = "root"; String pass = "ilovejava"; 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//GettingStartedTW.cpt"); int lens = (int) cptfile.length(); InputStream ins = new FileInputStream(cptfile); // 將範本儲存入庫 presmt.setString(1, "GettingStartedTW.cpt"); // 第一個欄位存放範本相對路徑 presmt.setBinaryStream(2, ins, lens); // 第二個欄位存放範本檔案的二進制流 presmt.execute(); conn.commit(); presmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } finally { SimpleWork.checkOut(); } }}
Java 程式編寫完成後,在編譯器中編譯 SaveReportToDatabase.java ,編譯透過後,就會在資料庫表report 中看到新增的範本記錄。如下圖所示:
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙