服务器 频道

多个Oracle数据库创建一个Excel报表

使用 JDBC

Java 数据库连接性 (JDBC) technology 是一个 Java API,它向 Oracle 数据库提供连接能力,以取回数据,用于填充电子表格。 JDBC API 还有一个特别之处,利用它还可在 Oracle 数据库间建立连接,用于发送 SQL 语句并处理结果。 本文中的程序只使用了这一 API 的部分功能,因为不需要执行 DML 或设置事务处理。 尽管支持所有类型的数据库,但这里我们要将处理限定到一个范围内,该范围内可清晰地映射到 Excel 电子表格。

Oracle JDBC 驱动依赖于 tnsnames.ora 或其他标准的 Oracle 客户连接信息。 只要系统中有 JRE 且 Oracle JDBC 驱动类存在于 CLASSPATH (且网络中有数据库),那么 Java 类就有足够的资源来创建到 Oracle 数据库连接。

classes12.jar 包含 Oracle 专用的 JDBC 驱动和类,它们也是本项目必须的要件。 它应该包含在 CLASSPATH 中,这样您才能够运行该程序。 你一般可以须 /jdbc/lib 找到该文件,你也可以从 OTN 中下载 该文件。

OracleConnectionVO 类包含与 JDBC 连接相关的信息和处理。 oracle.jdbc.driver.OracleDriver 将是一个 URL,其形式为 jdbc:oracle:thin:@:@:@,将通过它来创建连接。

Jakarata POI

正如我在 以前的文章中所述,Jakarta POI FileSystem API 以纯 Java 方式实施 OLE 2 复合文档格式,且通过 HSSF API 可以用 Java 来读写 Excel 文件。 在该篇文章中,使用了这一 API 来读取 Excel 文件。 这里我们将使用它来写一个 Excel 文件。 (POI 也为您提供了打开已有的电子表格并对它进行操作的功能)。 如果你想了解 POI 的列多功能,请参见 “HSSF 特性指南”,其中提供有代码实例,演示了开发人员经常需要的功能。

要创建一个工作表对象,调用以下代码(在 BroadcastDriver 类):

HSSFWorkbook wb = new HSSFWorkbook(fs);

在 POISheetGenerator 类完成调用,以创建工作表,然后它加入工作表中:

HSSFSheet sheet = wb.createSheet(sheetname);

列标题的字体为粗体,配置如下:

HSSFFont boldFont = wb.createFont();
    boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    HSSFCellStyle boldStyle = wb.createCellStyle();
    boldStyle.setFont(boldFont);

在与迭代与结果集相关的列时,将应用上面定义的单元格格式:

row.getCell((short) x).setCellStyle(boldStyle);

要将工作表写入磁盘中,调用以下代码:

OutputStream = new FileOutputStream("output.xls");
    wb.write(out);
    out.close();
 broadcast.jar

broadcast.jar 包含了组成项目本身的类:

BroadcastDriver. BroadcastDriver 包含了用于这一应用程序的主要方法。 创建 HSSFWorkbook() 对象,该对象用于容纳所有的工作表。 然后创建 XMLConfigVO 对象,该对象用于从 config.xml 中读取连接和 SQL 查询。 使用该对象中包含的信息,应用程序将迭代每个 OracleConnectionVO 并设置 JDBC 驱动,JDBC 数据库 URL,数据库名称,数据库密码,SQL 查询和工作表的名称(形式为 -)。 填充有数据的工作表将加入工作表。 当所有连接迭代完成后,工作表将写入到文件系统中。

OracleConnectionVO. OracleConnectionVO 中保存了 JDBC 驱动、JDBC 数据库 URL、数据库名称、数据库密码和 SQL 查询的值。

XMLConfigVO. XMLConfigVO 创建 DocumentBuilderFactory 以分析 config.xml 文档。 XPath 查询用于检索包含所需值的 NodeList:

NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);

当找到正确的节点后,您可以调用 getNodeValue() 来取回它的值。POISheetGenerator. 该类的 populateSheet 方法完成大部分的工作。 经过初始设置后,列标题将以粗体显示。数据库连接已经打开,查询将执行。

检索了元数据,我们需要元数据来确定将要迭代的列的数量。 元数据还包含了一些列的名称,这些名称将作为正在处理的工作表中的列名。 接下来将迭代结果集。 本例中的对各种数据的处理都是很初级的。 对于第个返回的对象,程序将试图以数字(特别是 Java 长字符)填充单元格。 如果出现 NumberFormatException 错误(因为该值不能转化为数字),将调用 toString,用于该返回对象。 toString 功能是在 Object 对象中定义的, Object 是 Java 体系的最底层,所以不管返回的是什么对象,都可以保证该方法的有效性。 但是,如果按照返回值对于对象的意义性和相关性来分析,那 toString 返回的实际值将是极其多样的。

0
相关文章