运行该项目
该项目在 Java 运行时环境 (JRE) 1.4.2_03 中完成了测试,但是它应该可以在任何能够运行 POI 的 JRE 中运行。您可以通过执行 runSample.bat 来运行 ExternalTableGenerator。这个批处理文件使用了在参数中所指定的 Excel 工作表,将相关的 jar 包含在类路径中 (XL2ExternalTables.jar;jakarta-poi-1.5.1-final-20020615.jar;jakarta-poi-contrib-1.5.1-final-20020615.jar) 并运行适当的 Java 类 com.saternos.database.utilities.ExternalTableGenerator。
示例成功运行后所得到的输出应该类似于以下内容(其路径基于您的工作目录)。
C:\Documents and Settings\Administrator\Desktop\XL2ETB>runExample C:\Documents and Settings\Administrator\Desktop\XL2ETB> java -cp XL2ExternalTables.jar;jakarta-poi-1.5.1-final-20020615.jar; jakarta-poi-contrib-1.5.1-final-20020 615.jar com.saternos.database.utilities.ExternalTableGenerator new_department_data.xls Begin processing. Using working directory C:\Documents and Settings\Administrator\Desktop\XL2ETB ...File PA_Zip_Code_Locations.csv created. ...Table PA_Zip_Code_Locations processed. ...File New_Departments.csv created. ...Table New_Departments processed. ...File New_Employees.csv created. ...Table New_Employees processed. ...File ExternalTables.sql created. Processing complete.
这些代码创建了三个数据文件(指定使用 .csv 扩展名)并生成一个的 SQL 脚本,该脚本包含用于创建外部表的 DDL。
以下是运行该 DDL 脚本并测试所得结果的一个示例。通过 SQL*Plus 从创建 ExternalTables.sql 脚本的目录连接到数据库,开始进行工作。
C:\XL2ETB>SQL*Plus testuser/mypassword@orcladm SQL*Plus:Release 10.1.0.2.0 - Production on Tue Dec 21 09:36:25 2004 Copyright (c) 1982, 2004, Oracle.All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production SQL> select * from tab; no rows selected
虽然本示例是一个空的模式,但是如果用户拥有适当的权限,并且没有名称冲突,则该脚本可以在任何模式中运行。
SQL> @ExternalTables
Directory created.
Table created.
Table created.
Table created.
该脚本被执行,并且创建了目录对象和三个外部表。
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
NEW_DEPARTMENTS TABLE
NEW_EMPLOYEES TABLE
PA_ZIP_CODE_LOCATIONS TABLE
SQL> select count(*) from new_departments;
COUNT(*)
----------
2
SQL> select count(*) from new_employees;
COUNT(*)
----------
14
SQL> select count(*) from pa_zip_code_locations;
COUNT(*)
----------
1458
SQL> select * from new_employees;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- ------------ -------- ---------- ----------
9499 ALDEN SALESMAN 9698 33289.0 3200 1300 50
9521 WORD SALESMAN 9698 33291.0 2500 1000 50
9654 MALTIN SALESMAN 9698 33509.0 2500 4400 50
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- ------------- -------- ---------- ----------
9844 TURKER SALESMAN 9698 33489.0 3000 0 50
SQL>
结论
本文介绍了 POI,但只是浅显地讨论了通过该 API 可以使用的功能。有多种方法可以增强本文中所描述的 ExternalTableGenerator 实用程序的功能:
本文有可能使您更希望探索通过协同使用 POI 和 Oracle 来促进在 Excel 与 Oracle 之间进行数据操作的可能性。

