http://dev2dev.bea.com.cn/techdoc/20060517793.html
WebLogic教程:在WebLogic Server中集成Apache Poi
--Apache
Jakarta POI項(xiàng)目提供了訪(fǎng)問(wèn)和生成Excel文檔的組件
Apache Jakarta POI項(xiàng)目提供了用于訪(fǎng)問(wèn)和生成Excel文檔的組件。POI HSSF API用于生成Excel
Workbook以及將Excel電子表格添加到workbook。Excel電子表格由行和單元格組成。電子表格的頁(yè)面布局和字體也使用POI HSSF
API進(jìn)行設(shè)置。
通常要求將數(shù)據(jù)庫(kù)表呈現(xiàn)在Excel電子表格中。同樣,開(kāi)發(fā)人員的需求也可以保存到數(shù)據(jù)庫(kù)表中的Excel電子表格中。Apache POI
HSSF項(xiàng)目旨在提供一個(gè)創(chuàng)建Excel電子表格的API。使用POI
HSSF項(xiàng)目生成的Excel電子表格中的數(shù)據(jù)可以是XML文檔中的靜態(tài)數(shù)據(jù),或者是從一個(gè)數(shù)據(jù)庫(kù)中動(dòng)態(tài)檢索到的數(shù)據(jù)。此外,Excel文檔也可以被轉(zhuǎn)換為XML文檔或者保存在數(shù)據(jù)庫(kù)中。在本教程中,我們將討論在WebLogic
Server中從一個(gè)MySQL數(shù)據(jù)庫(kù)表創(chuàng)建Excel電子表格的步驟,隨后將該Excel電子表格保存在一個(gè)數(shù)據(jù)庫(kù)表中。
初步設(shè)置
org.apache.poi.hssf.usermodel包提供POI
HSSF項(xiàng)目的實(shí)現(xiàn)。要生成或解析Excel電子表格,需要在類(lèi)路徑中設(shè)置org.apache.poi.hssf.usermodel包類(lèi)。下載Apache
POI庫(kù)poi-bin-2.5.1-final-20040804.zip文件,將該zip文件解壓縮所到一個(gè)安裝目錄(http://jakarta.apache.org/poi/)。安裝WebLogic Server
8.1。下載MySQL數(shù)據(jù)庫(kù)(www.mysql.com)。解壓縮MySQL
zip文件mysql-4.0.25-win32.zip到一個(gè)目錄下。安裝MySQL數(shù)據(jù)庫(kù)。下載MySQL Connector/J JDBC驅(qū)動(dòng)程序(www.mysql.com/products/connector/j/)。解壓縮MySQL
zip文件mysql-connector-java-3.1.10.zip到一個(gè)目錄下。添加MySQL
JDBC驅(qū)動(dòng)程序jar文件mysql-connector-java-3.1.10-bin.jar到<weblogic81>\samples\domains\examples\startExamplesServer腳本CLASSPATH變量。
使用下面的DOS命令登錄到MySQL數(shù)據(jù)庫(kù):
>mysql
使用下面的命令訪(fǎng)問(wèn)示例數(shù)據(jù)庫(kù)測(cè)試:
mysql>use test
在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)示例數(shù)據(jù)庫(kù)表,將在此生成Excel電子表格。清單1展示了創(chuàng)建示例表Catalog的SQL腳本。
清單1:Catalog.sql
CREATE TABLE Catalog(CatlogId VARCHAR(25)
PRIMARY KEY, Journal VARCHAR(25), Section VARCHAR(25),
Edition VARCHAR(25), Title Varchar(125), Author Varchar(25));
INSERT INTO Catalog VALUES('catalog1', 'dev2dev',
'WebLogic Platform 8.1',
'Oct 2004', 'BEA WebLogic Platform 8.1 SP3 Evaluation Guide',
'dev2dev');
INSERT INTO Catalog VALUES('catalog2', 'dev2dev',
'WebLogic Server',
'Feb 2005', 'Application Architecture for Applications Built on
BEA WebLogic Platform 8.1', 'Bob Hensle');
INSERT INTO Catalog VALUES('catalog3', 'dev2dev',
'WebLogic Integration',
'March 2005', 'The BEA WebLogic Platform and Host Integration',
'Tom Bice');
接下來(lái),我們將向WebLogic Server Classpath添加Apache POI .jar文件,并在WebLogic
Server中創(chuàng)建一個(gè)JDBC數(shù)據(jù)源來(lái)檢索用于Excel電子表格的數(shù)據(jù)。
添加poi-2.5.1-final-20040804.jar文件到<weblogic81>\samples\domains\examples\startExamplesServer腳本中的CLASSPATH變量中。<weblogic81>是安裝WebLogic
Server的目錄。
接下來(lái),使用MySQL數(shù)據(jù)庫(kù)在WebLogic
Server中創(chuàng)建JDBC連接。使用startExamplesServer腳本啟動(dòng)示例服務(wù)器。使用URL
http://localhost:7001/console或者WebLogic Server Examples索引中的Administration
Console鏈接來(lái)訪(fǎng)問(wèn)管理控制臺(tái)。在管理控制臺(tái)中,右擊examples>Services>JDBC>Connection
Pools節(jié)點(diǎn),并選擇Configure a new JDBCConnectionPool。指定以下連接屬性來(lái)配置JDBC連接池:
- 數(shù)據(jù)庫(kù)類(lèi)型:MySQL
- JDBC驅(qū)動(dòng)程序:MySQL's Driver (Type 4)
- 數(shù)據(jù)庫(kù)名稱(chēng):test
- 主機(jī)名:localhost
- 端口號(hào):3306
- 驅(qū)動(dòng)程序類(lèi)名:com.mysql.jdbc.Driver
- 連接URL:jdbc:mysql://localhost:3306/test
接下來(lái),在管理控制臺(tái)中配置JDBC數(shù)據(jù)源。右擊examples>Services>JDBC>DataSources節(jié)點(diǎn),并選擇Configure
a new JDBCTxDataSource。在Configure the data
source框中指定數(shù)據(jù)源名和JNDI名——例如,MySqlDS。在Connect to connection
pool框中選擇先前使用MySQL數(shù)據(jù)庫(kù)配置的連接池。在Target the
datasource框中選擇examplesServer。這樣就使用MySQL數(shù)據(jù)庫(kù)配置了一個(gè)數(shù)據(jù)源。
使用Apache POI生成Excel文檔
在這一節(jié)中,我們將從示例數(shù)據(jù)庫(kù)表生成Excel電子表格。首先,創(chuàng)建一個(gè)生成Excel電子表格的JSP應(yīng)用程序。
在JSP中,將從一個(gè)MySQL數(shù)據(jù)庫(kù)表創(chuàng)建Excel電子表格。使用Apache POI HSSF API來(lái)生成Excel電子表格。Apache POI
HSSF包中含有用于Excel電子表格的不同組件的類(lèi)。表1列出了Apache POI HSSF包中一些常用的類(lèi):

首先,導(dǎo)入Apache POI HSSF包:
<%@ page import="org.apache.poi.hssf.usermodel.*, java.sql.*,
java.io.*,javax.naming.InitialContext"%>
創(chuàng)建一個(gè)Excel workbook:
HSSFWorkbook wb=new HSSFWorkbook();
接下來(lái),創(chuàng)建一個(gè)Excel電子表格:
HSSFSheet sheet1=wb.createSheet("sheet1");
該電子表格的數(shù)據(jù)是從MySQL數(shù)據(jù)庫(kù)表檢索得到的。從數(shù)據(jù)庫(kù)獲得JDBC連接。JDBC連接是使用datasource JNDI
MySqlDS獲得的。
InitialContext initialContext = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)
initialContext.lookup("MySqlDS");
java.sql.Connection conn = ds.getConnection();
創(chuàng)建一個(gè)java.sql.Statement,并從示例表Catalog獲得結(jié)果集:
Statement stmt=conn.createStatement();
ResultSet resultSet=stmt.executeQuery("Select * from Catalog");
為Excel電子表格創(chuàng)建一個(gè)標(biāo)題行。Excel電子表格中的行從“0”開(kāi)始。
HSSFRow row=sheet1.createRow(0);
對(duì)應(yīng)于表的列設(shè)置標(biāo)題行單元格的值。行單元格也是從“0”開(kāi)始。例如,行中第一個(gè)單元格的值被使用setCellValue方法設(shè)置為CatalogId。
row.createCell((short)0).setCellValue("CatalogId");
要向電子表格添加行,迭代結(jié)果集并為每個(gè)表格行添加一行。從ResultSet檢索列值,并在行單元格中設(shè)置這些值。
for (int i=1;resultSet.next(); i++)
{
row=sheet1.createRow(i);
row.createCell((short)0).setCellValue(resultSet.getString(1));
row.createCell((short)1).setCellValue(resultSet.getString(2));
row.createCell((short)2).setCellValue(resultSet.getString(3));
row.createCell((short)3).setCellValue(resultSet.getString(4));
row.createCell((short)4).setCellValue(resultSet.getString(5));
}
創(chuàng)建一個(gè)FileOutputStream來(lái)將Excel電子表格輸出到XLS文件。每個(gè)XLS文件表示一個(gè)Excel電子表格:
FileOutputStream
output=new文件OutputStream(new文件("c:/excel/catalog.xls"));
將Excel電子表格輸出到XLS文件:
wb.write(output);
在“參考資料”部分有用于生成Excel電子表格的ExcelWebLogic.jsp JSP。
要在WebLogic Server中運(yùn)行ExcelWebLogic.jsp
JSP,復(fù)制該JSP到<weblogic81>\samples\server\examples\build\mainWebApp目錄。使用URL
http://localhost:7001/ExcelWebLogic.jsp運(yùn)行該JSP。
生成的Excel電子表格可以在Excel (http://office.microsoft.com/en-us/FX010858001033.aspx)或Excel
Viewer工具tool (http://office.microsoft.com/en-us/assistance/HA011620741033.aspx)中打開(kāi)。
將Excel文檔保存在數(shù)據(jù)庫(kù)表中
本節(jié)我們將使用Apache POI
API將一個(gè)Excel電子表格保存在MySQL數(shù)據(jù)庫(kù)表中。要保存的示例Excel文檔是catalog.xls,即,前一節(jié)所生成的電子表格。該Excel電子表格被保存在MySQL表Catalog中。使用MySQL命令刪除前一節(jié)中用于生成Excel文檔的Catalog表:
MySQL>DROP table Catalog;
開(kāi)發(fā)一個(gè)JSP應(yīng)用程序來(lái)將示例Excel文檔保存在MySQL數(shù)據(jù)庫(kù)中。在JSP應(yīng)用程序中導(dǎo)入Apache
POI包org.apache.poi.poifs.filesystem和org.apache.poi.hssf.usermodel。org.apache.poi.poifs.filesystem包中包含創(chuàng)建Excel
workbook的類(lèi),而org.apache.poi.hssf.usermodel包中包含表示Excel
workbook、電子表格、電子表格行和行單元格的類(lèi)。
<%@ page import="org.apache.poi.poifs.filesystem.*,
org.apache.poi.hssf.usermodel.*, java.sql.*,
java.io.*,javax.naming.InitialContext"%>
像前一節(jié)一樣,從MySQL datasource獲得JDBC連接:
InitialContext initialContext = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)
initialContext.lookup("MySqlDS");
java.sql.Connection conn = ds.getConnection();
從JDBC連接創(chuàng)建java.sql.Statement:
Statement stmt=conn.createStatement();
創(chuàng)建一個(gè)MySQL表來(lái)保存Excel電子表格:
String createTable="CREATE TABLE Catalog(CatalogId VARCHAR(25) PRIMARY KEY,Journal
VARCHAR(25),Section VARCHAR(25),Edition VARCHAR(25),Title Varchar(125),Author Varchar(25))";
stmt.execute(createTable);
創(chuàng)建一個(gè)POIFSFileSystem來(lái)讀取Excel文檔:
File catalogExcel=new File("C:/ExcelWebLogic/catalog.xls");
FileInputStream inputStream=new FileInputStream(catalogExcel);
POIFSFileSystem fileSystem=new POIFSFileSystem(inputStream);
從POIFSFileSystem獲得一個(gè)HSSF workbook:
HSSFWorkbook wb=new HSSFWorkbook(fileSystem);
從Excel workbook獲得一個(gè)Excel電子表格:
HSSFSheet sheet1=wb.getSheet("sheet1");
使用row iterator迭代電子表格中的行:
java.util.Iterator rowIterator=sheet1.rowIterator();
HSSFRow row=(HSSFRow)rowIterator.next();
對(duì)于每一行,迭代行單元格的值。例如,CatalogId行單元格值是使用以下代碼檢索的:
String catalogId=row.getCell((short)0).getStringCellValue();
對(duì)于Excel電子表格中的每一行,添加一個(gè)表格行:
String exceltable="INSERT INTO Catalog VALUES("+"\'"+catalogId+"\
'"+","+"\'"+journal
+"\'"+","+"\'"+section+"\'"+","+"\'"+edition+"\'"+","+"\'"+title+"\
'"+","+"\'"+author+"\'"+")";
stmt.execute(exceltable);
復(fù)制POIWebLogic.jsp到<weblogic81>\samples\server\examples\build\mainWebApp目錄。使用URL
http://localhost:7001/POIWebLogic.jsp運(yùn)行JSP。這樣就從Excel電子表格生成一個(gè)MySQL數(shù)據(jù)庫(kù)表。在“參考資料”部分有用于從Excel電子表格生成數(shù)據(jù)庫(kù)表的POIWebLogic.jsp。
結(jié)束語(yǔ)
在本教程中,我們從一個(gè)MySQL數(shù)據(jù)庫(kù)表生成了一個(gè)Excel電子表格,隨后將該電子表格保存在一個(gè)數(shù)據(jù)庫(kù)表中。WebLogic
Server提供了一個(gè)數(shù)據(jù)源以及運(yùn)行JSP應(yīng)用程序的J2EE應(yīng)用服務(wù)器,從而方便了從數(shù)據(jù)庫(kù)表到Excel電子表格以及從電子表格到數(shù)據(jù)庫(kù)表的轉(zhuǎn)換。
原文出處:http://wldj.sys-con.com/read/185302.htm
作者簡(jiǎn)介 |
|
Ajay
Vohra 是DataSynapse公司的高級(jí)解決方案架構(gòu)師。 |
|
Deepak
Vohra 是一名NuBean顧問(wèn)兼web開(kāi)發(fā)人員。他擁有Sun Certified Java 1.4 Programmer和Sun Certified
Web Component Developer for J2EE證書(shū)。 |