跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 技术文章
WebLogic教程:在WebLogic Server中集成Apache Poi
--Apache Jakarta POI项目提供了访问和生成Excel文档的组件

时间:2006-05-17
作者:Ajay VohraDeepak Vohra
浏览次数:
本文关键字:ApachePoiApache PoiWebLogic ServerExcel
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  Apache Jakarta POI项目提供了用于访问和生成Excel文档的组件。POI HSSF API用于生成Excel Workbook以及将Excel电子表格添加到workbook。Excel电子表格由行和单元格组成。电子表格的页面布局和字体也使用POI HSSF API进行设置。

  通常要求将数据库表呈现在Excel电子表格中。同样,开发人员的需求也可以保存到数据库表中的Excel电子表格中。Apache POI HSSF项目旨在提供一个创建Excel电子表格的API。使用POI HSSF项目生成的Excel电子表格中的数据可以是XML文档中的静态数据,或者是从一个数据库中动态检索到的数据。此外,Excel文档也可以被转换为XML文档或者保存在数据库中。在本教程中,我们将讨论在WebLogic Server中从一个MySQL数据库表创建Excel电子表格的步骤,随后将该Excel电子表格保存在一个数据库表中。

初步设置

  org.apache.poi.hssf.usermodel包提供POI HSSF项目的实现。要生成或解析Excel电子表格,需要在类路径中设置org.apache.poi.hssf.usermodel包类。下载Apache POI库poi-bin-2.5.1-final-20040804.zip文件,将该zip文件解压缩所到一个安装目录(http://jakarta.apache.org/poi/)。安装WebLogic Server 8.1。下载MySQL数据库(www.mysql.com)。解压缩MySQL zip文件mysql-4.0.25-win32.zip到一个目录下。安装MySQL数据库。下载MySQL Connector/J JDBC驱动程序(www.mysql.com/products/connector/j/)。解压缩MySQL zip文件mysql-connector-java-3.1.10.zip到一个目录下。添加MySQL JDBC驱动程序jar文件mysql-connector-java-3.1.10-bin.jar到<weblogic81>\samples\domains\examples\startExamplesServer脚本CLASSPATH变量。

  使用下面的DOS命令登录到MySQL数据库:

  >mysql

  使用下面的命令访问示例数据库测试:

  mysql>use test

  在MySQL数据库中创建一个示例数据库表,将在此生成Excel电子表格。清单1展示了创建示例表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');

  接下来,我们将向WebLogic Server Classpath添加Apache POI .jar文件,并在WebLogic Server中创建一个JDBC数据源来检索用于Excel电子表格的数据。

  添加poi-2.5.1-final-20040804.jar文件到<weblogic81>\samples\domains\examples\startExamplesServer脚本中的CLASSPATH变量中。<weblogic81>是安装WebLogic Server的目录。

  接下来,使用MySQL数据库在WebLogic Server中创建JDBC连接。使用startExamplesServer脚本启动示例服务器。使用URL http://localhost:7001/console或者WebLogic Server Examples索引中的Administration Console链接来访问管理控制台。在管理控制台中,右击examples>Services>JDBC>Connection Pools节点,并选择Configure a new JDBCConnectionPool。指定以下连接属性来配置JDBC连接池:

  • 数据库类型:MySQL
  • JDBC驱动程序:MySQL's Driver (Type 4)
  • 数据库名称:test
  • 主机名:localhost
  • 端口号:3306
  • 驱动程序类名:com.mysql.jdbc.Driver
  • 连接URL:jdbc:mysql://localhost:3306/test

  接下来,在管理控制台中配置JDBC数据源。右击examples>Services>JDBC>DataSources节点,并选择Configure a new JDBCTxDataSource。在Configure the data source框中指定数据源名和JNDI名——例如,MySqlDS。在Connect to connection pool框中选择先前使用MySQL数据库配置的连接池。在Target the datasource框中选择examplesServer。这样就使用MySQL数据库配置了一个数据源。

使用Apache POI生成Excel文档

  在这一节中,我们将从示例数据库表生成Excel电子表格。首先,创建一个生成Excel电子表格的JSP应用程序。

  在JSP中,将从一个MySQL数据库表创建Excel电子表格。使用Apache POI HSSF API来生成Excel电子表格。Apache POI HSSF包中含有用于Excel电子表格的不同组件的类。表1列出了Apache POI HSSF包中一些常用的类:

使用Apache POI生成Excel文档

  首先,导入Apache POI HSSF包:

  <%@ page import="org.apache.poi.hssf.usermodel.*,  java.sql.*,
  java.io.*,javax.naming.InitialContext"%>
创建一个Excel workbook:

  HSSFWorkbook wb=new HSSFWorkbook();

  接下来,创建一个Excel电子表格:

  HSSFSheet sheet1=wb.createSheet("sheet1");

  该电子表格的数据是从MySQL数据库表检索得到的。从数据库获得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();

  创建一个java.sql.Statement,并从示例表Catalog获得结果集:

  Statement stmt=conn.createStatement();
  ResultSet resultSet=stmt.executeQuery("Select * from Catalog");

  为Excel电子表格创建一个标题行。Excel电子表格中的行从“0”开始。

  HSSFRow row=sheet1.createRow(0);

  对应于表的列设置标题行单元格的值。行单元格也是从“0”开始。例如,行中第一个单元格的值被使用setCellValue方法设置为CatalogId。

  row.createCell((short)0).setCellValue("CatalogId");

  要向电子表格添加行,迭代结果集并为每个表格行添加一行。从ResultSet检索列值,并在行单元格中设置这些值。

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));
} 

  创建一个FileOutputStream来将Excel电子表格输出到XLS文件。每个XLS文件表示一个Excel电子表格:

  FileOutputStream output=new文件OutputStream(new文件("c:/excel/catalog.xls"));

  将Excel电子表格输出到XLS文件:

  wb.write(output);

  在“参考资料”部分有用于生成Excel电子表格的ExcelWebLogic.jsp JSP。

  要在WebLogic Server中运行ExcelWebLogic.jsp JSP,复制该JSP到<weblogic81>\samples\server\examples\build\mainWebApp目录。使用URL http://localhost:7001/ExcelWebLogic.jsp运行该JSP。

  生成的Excel电子表格可以在Excel (http://office.microsoft.com/en-us/FX010858001033.aspx)或Excel Viewer工具tool (http://office.microsoft.com/en-us/assistance/HA011620741033.aspx)中打开。

将Excel文档保存在数据库表中

  本节我们将使用Apache POI API将一个Excel电子表格保存在MySQL数据库表中。要保存的示例Excel文档是catalog.xls,即,前一节所生成的电子表格。该Excel电子表格被保存在MySQL表Catalog中。使用MySQL命令删除前一节中用于生成Excel文档的Catalog表:

  MySQL>DROP table Catalog;

  开发一个JSP应用程序来将示例Excel文档保存在MySQL数据库中。在JSP应用程序中导入Apache POI包org.apache.poi.poifs.filesystem和org.apache.poi.hssf.usermodel。org.apache.poi.poifs.filesystem包中包含创建Excel workbook的类,而org.apache.poi.hssf.usermodel包中包含表示Excel workbook、电子表格、电子表格行和行单元格的类。

  <%@ page import="org.apache.poi.poifs.filesystem.*,
  org.apache.poi.hssf.usermodel.*, java.sql.*,
  java.io.*,javax.naming.InitialContext"%>

  像前一节一样,从MySQL datasource获得JDBC连接:

  InitialContext initialContext = new InitialContext();
        javax.sql.DataSource ds =  (javax.sql.DataSource)
        initialContext.lookup("MySqlDS");
        java.sql.Connection conn = ds.getConnection();

  从JDBC连接创建java.sql.Statement:

  Statement stmt=conn.createStatement();

  创建一个MySQL表来保存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);

  创建一个POIFSFileSystem来读取Excel文档:

  File catalogExcel=new File("C:/ExcelWebLogic/catalog.xls");
  FileInputStream inputStream=new FileInputStream(catalogExcel);
  POIFSFileSystem fileSystem=new POIFSFileSystem(inputStream);

  从POIFSFileSystem获得一个HSSF workbook:

  HSSFWorkbook wb=new HSSFWorkbook(fileSystem);

  从Excel workbook获得一个Excel电子表格:

  HSSFSheet sheet1=wb.getSheet("sheet1");

  使用row iterator迭代电子表格中的行:

  java.util.Iterator rowIterator=sheet1.rowIterator();
  HSSFRow row=(HSSFRow)rowIterator.next();

  对于每一行,迭代行单元格的值。例如,CatalogId行单元格值是使用以下代码检索的:

  String catalogId=row.getCell((short)0).getStringCellValue();

  对于Excel电子表格中的每一行,添加一个表格行:

String exceltable="INSERT INTO Catalog VALUES("+"\'"+catalogId+"\
'"+","+"\'"+journal
+"\'"+","+"\'"+section+"\'"+","+"\'"+edition+"\'"+","+"\'"+title+"\
'"+","+"\'"+author+"\'"+")";
stmt.execute(exceltable); 

  复制POIWebLogic.jsp到<weblogic81>\samples\server\examples\build\mainWebApp目录。使用URL http://localhost:7001/POIWebLogic.jsp运行JSP。这样就从Excel电子表格生成一个MySQL数据库表。在“参考资料”部分有用于从Excel电子表格生成数据库表的POIWebLogic.jsp。

结束语

  在本教程中,我们从一个MySQL数据库表生成了一个Excel电子表格,随后将该电子表格保存在一个数据库表中。WebLogic Server提供了一个数据源以及运行JSP应用程序的J2EE应用服务器,从而方便了从数据库表到Excel电子表格以及从电子表格到数据库表的转换。

原文出处:http://wldj.sys-con.com/read/185302.htm

 作者简介
Ajay Vohra 是DataSynapse公司的高级解决方案架构师。
Deepak Vohra 是一名NuBean顾问兼web开发人员。他拥有Sun Certified Java 1.4 Programmer和Sun Certified Web Component Developer for J2EE证书。
dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分