PageOffice產品和數據庫是兩個獨立的概念,嚴格來說兩者之間沒有任何本質關系。PageOffice不依賴數據庫而存在,但是數據庫和PageOffice可以結合使用來完成某些復雜的業務邏輯。例如:PageOffice可以打開數據庫中的二進制流文件,也可以將Word或者Excel整個文檔或者文檔中的一部分數據保存到數據庫中,這里的數據庫可以是任意數據庫,如:Sqlite,Access,SQL Server,Oracle,MySQL,DB2,Sybase等。下面我們就此問題展開詳細論述。
1)打開文檔的Stream.jsp頁面:
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request); poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); …… poCtrl1.setSaveFilePage("SaveFile.jsp?id=1"); poCtrl1.webOpen("Openstream.jsp?id=1", OpenModeType.docNormalEdit, "張三");
2)下載文檔的Openstream.jsp頁面:
String id = request.getParameter("id");
Class.forName("org.sqlite.JDBC");
String strUrl = "jdbc:sqlite:" + this.getServletContext().getRealPath("demodata/DataBase.db");
Connection conn = DriverManager.getConnection(strUrl);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from stream where id = "+ id);
if (rs.next()) {
//******讀取磁盤文件,輸出文件流 開始****
byte[] imageBytes = rs.getBytes("Word");
int fileSize = imageBytes.length;
response.reset();
response.setContentType("application/msword");
response.setHeader("Content-Disposition","attachment; filename=down.doc");
response.setContentLength(fileSize);
OutputStream outputStream = response.getOutputStream();
outputStream.write(imageBytes);
outputStream.flush();
outputStream.close();
outputStream = null;
//******讀取磁盤文件,輸出文件流 結束*************
}
rs.close();
conn.close();
3) 保存文件到數據庫中SaveFile.jsp的代碼:
FileSaver fs = new FileSaver(request, response); String err = ""; if (request.getParameter("id") != null && request.getParameter("id").trim().length() > 0) { String id = request.getParameter("id").trim(); Class.forName("org.sqlite.JDBC"); String strUrl = "jdbc:sqlite:" + this.getServletContext().getRealPath("demodata/") + "\\DataBase.db"; Connection conn = DriverManager.getConnection(strUrl); String sql = "UPDATE Stream SET Word=? where ID=" + id; PreparedStatement pstmt = null; pstmt = conn.prepareStatement(sql); pstmt.setBytes(1,fs.getFileBytes()); //pstmt.setBinaryStream(1, fs.getFileStream(),fs.getFileSize()); pstmt.executeUpdate(); pstmt.close(); conn.close(); fs.setCustomSaveResult("ok"); } else { err = "<script>alert('未獲得文件的ID,保存失敗');</script>"; } fs.close();
注:該示例的完整代碼和詳細演示請參考PageOffice產品開發包中的Samples或者Samples4示例:二、2、打開保存數據庫中的文件(以Word為例)
PageOffice下載地址,訪問http://www.zhuozhengsoft.com/,點擊首頁的立即下載。
在線打開文件的效果圖:

