IBM WebSphere Studio Application Developer(以下简称为Application Developer)是一个应用程序开发产品,它支持利用JSP、Servlet、HTML、XML、Web 服务、数据库和 EJB等不同的技术来构建各种应用程序。特别地,ApplicationDeveloper 提供 XML 和关系数据之间的紧集成。Application Developer 支持所有 WebSphere Application Server 支持的数据库,包括 DB2、Oracle、Sybase 和 Microsoft SQL Server。
这是本系列文章的第九部分,重点介绍Application Developer 提供的 XML 工具。第九部分研究 XML to SQL特征,这种特征使您能够利用 XML文档来更新关系数据库表。利用该特征,您可以根据 XML文档的内容执行数据修改操作,比如更新、删除和插入等。本文首先介绍XML to SQL 向导,它是一个可视化的工具,可以用于交互式地更新数据库表。接着,样本应用程序将展示主要API 的使用。
第三部分特别重要,因为如果将这一部分的内容与本文结合起来,将可以很好地展示关系数据库和XML 之间的循环数据访问。
本文将由三个主要部分组成:
为了学习该样本,您需要安装WebSphere Studio ApplicationDeveloper 5.0 或 5.1。
- 我们首先使用在本系列的 第三部分用过的 VIDEOS 数据库。遵循 第三部分中的步骤来设置数据库并根据 EMPLOYEES 表创建 SQL 查询,如图 1 所示。
- 一旦 SQL 查询创建完毕,我们就将使用 XML From SQL 向导(图 2)带有其他构件(比如语法文件、缺省的 XSL 文件)的 XML 文件。在此之前,我们先在 VideoStoreProject 中创建一个文件夹来存储所有的结果构件。在本文中,我们将此文件夹命名为
Employees
。 - 打开向导,右键单击 select_employees,如图 1 所示,然后选择 Generate new XML...。选择 DTD作为 Schema 定义,将输出文件夹命名为
/VideoStoreProject/Employees
。
如图 2 所示。 - 单击 Finish从 SQL 查询生成 XML 构件作。这将会在在输出文件夹中生成 XML、DTD、XSL、和 HTML 文件。HTML 的结果如表 1 所示。
表 1. 生成的 SQL 查询结果 (
select_
employees.xml
)EMP_ID 名称 JOB_TITLE HIRE_DATE 存储 10 Allan Baker Manager 2000-01-01 1 11 Carol Dan Manager 2000-01-01 2 20 Eric Frank Sales Rep 2000-01-02 1 21 Garry Hans Asst Sales Rep 2000-02-01 1 22 Ivan James Sales Rep 2000-02-01 2 12 Karen Law Manager 2000-06-05 3 23 Mike Nichols Sales Rep 2000-06-06 3
在下一章节中,我们将修改结果 XML 文件的内容,然后通过更新数据库表来反映 XML 内容的改变。生成的 SQL 查询结果的部分 XML 代码(
select_employees.xml
):<?xml version="1.0" encoding="UTF-8"?> <SQLResult> ... <EMPLOYEES> <EMP_ID>21</EMP_ID> <NAME>Garry Hans</NAME> <JOB_TITLE>Asst Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> <EMPLOYEES> <EMP_ID>22</EMP_ID> <NAME>Ivan James</NAME> <JOB_TITLE>Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>2</STORE> </EMPLOYEES> ... </SQLResult>
XML提供了许多更新数据库的方法。在这一部分中,我们将通过 XML To SQL向导来更新 EMPLOYEES 表。
- 首先, 我们将修改前一部分生成的 XML 文件。但是请注意,我们不能修改您声明的主键列或任何其他的键列;在本例中,
EMP_ID
是主键列。我们将会如下更新employees.xml
中的两行:Garry 提升为 Sales Rep,而 Ivan 提升为存储 1 中的 Manager。我们将select_employees.xml
复制到employees.xml
并修改相关内容,如下面的粗体文本所示:修改 XML 内容来更新数据库(
employees.xml
):<?xml version="1.0" encoding="UTF-8"?> <SQLResult> <EMPLOYEES> <EMP_ID>21</EMP_ID> <NAME>Garry Hans</NAME> <JOB_TITLE>Sales Rep</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> <EMPLOYEES> <EMP_ID>22</EMP_ID> <NAME>Ivan James</NAME> <JOB_TITLE>Manager</JOB_TITLE> <HIRE_DATE>2000-02-01</HIRE_DATE> <STORE>1</STORE> </EMPLOYEES> </SQLResult>
- 文件修改完后,在文件上单击右键,在 Navigator 视图中调用 XML To SQL 向导。您可以选择 File => New => Other... => XML 来启动向导。图 3 显示了向导的第一个对话框,可以用来准备数据库连接。我们可以创建一个新的连接或重用前面已经创建好的 Video连接。选择 Use existing connection:,然后选择 Next。
- 在下一个对话框中(图 4),从 Action 下拉列表中选择 UPDATE,因为我们将更新 EMPLOYEES 表。(在其他的 Schema 中可能会存在同名的表,所以务必保证选择正确的 Schema。)
图 4. Action(和可选的 Schema ) 选择页
- 在 XML to SQL 向导的最后一页上,选择 JOB_TITLE和 STORE,它们是需要更新的列。标有钥匙图标的键列字段是不可选的。单击 Finish完成数据库表的更新。
图 5.
在这一部分中,我们将开发一个使用 XMLToSQL API 进行 VIDEOS数据库更新的命令行应用程序。利用这个应用程序,您可以通过输入XML 文件来更新 Employees 表的记录、在 Employees表中插入新的记录或删除现有的记录。输入 XML文件的格式必须符合由SQL To XML向导生成 XML 文件的要求。此样本程序仅仅演示 API可以如何用来执行数据库操作。在 plugins_directory/com.ibm.etools.sqltoxml/jars/sqltoxml_javadoc.zip
上可以找到API的完整的Javadoc。
该类用于提供XMLToSQL 更新数据库表所必需的数据。该类的实例用作 XMLToSQL 构造器的一个参数。
首先,创建一个 SQLProperties实例,同时提供目标操作(包括数据库用户 ID、密码,JDBC 连接信息以及SQL命令模式(比如更新、插入或删除))所必需的信息。这些信息可以通过该类的set 方法来获得,也可以外部 XST 文件(可以作为 SQL to XML的一部分生成)来提供。
下面的样本代码提供了使用 SET 方法所需的信息。
使用SQLProperties:
|
注意上面的代码片段,如果我们想提供我们自己的JDBC 连接信息,那么粗体部分就是不需要的。这可以调用MLToSQL.setConnection(java.sql.Connection)方法来完成。
对于我们的样本程序,我们将使用外部XST 文件来加载信息。文件内容如下所示:
update_employees.xst
:
|
下面的代码显示了如何将XST 文件加载到 SQLProperties。
代码示例:loadProperties()
|
一旦准备好SQLProperties,我们就需要去创建一个使用 XML 文档进行记录的添加、修改、删除操作的XMLToSQL 实例。XML结构和数据库表之间的映射关系是建立在一组映射规则上的。如下面的XML 片段所示:
XMLToSQL 映射规则
|
- 根元素可以包含 0-n 个元素。根元素的标签是不相关的。根目录所包含的全部元素都按照特定的操作类型进行处理。
- 每个元素都映射到相对应表中的一行上。例如,EMPLOYEE 元素映射到 EMPLOYEE 表。EMPLOYEE 的子元素根据名称映射到 EMPLOYEE 表的两列。也就是说,FIRSTNAME 元素对应 EMPLOYEE 表中的 FIRSTNAME 列,LASTNAME 元素对应 EMPLOYEE 表中的 LASTNAME 列。
- XMLToSQL 库能根据表中所对应的列的列值和数据类型来创建适当的 SQL 语句(例如插入、更新或删除)。
首先采用SQLToXML 运行时库来创建有效的XML文档,然后再修改它来提供用于更新的值是个很好的方法。同时,您也可以在编写使用XMLToSQL 运行时库的代码之前通过 XML To SQL 向导进行 XML文档的单元测试。
我们在前面的部分中创建的 SQLProperties已传递到了 XMLToSQL 构造器中。XMLToSQL创建完后,就可以设置主键列和目标列了。下面的样本代码演示了这些步骤:
代码示例-- execute()
|
从上面的代码中可以发现三件有趣的事情,它展示了在配置XMLToSQL 的过程中其他的一些灵活性:
- prop.setAction() 用于覆盖在
update_employees.xst
中指定的操作。例如,如果我们想删除所对应的行而不是更新它们,我们就可以使用 prop.setAction(SQLProperties.DELETE)。 - 如果我们想使用 XMLToSQL 来显示 SQL 语句,当在命令行上执行操作时,xml2sql.setTrace(true) 就可以打印出 SQL 语句。同时我们还可以把 java.io.PrintWriter 作为附加的参数来使用 setTrace()。详细信息请参阅 Javadoc。
- 注意 xml2sql.setConnection() 方法。如果没有它,XMLToSQL 在执行一个操作前,将使用用户提供的数据库信息来创建 JDBC 连接,完成操作后,又会关闭连接。但是,setConnection() 能够提供一外部连接,那么在这种情况下,XMLToSQL 就会改为使用此连接。该用户将负责清理随后操作中的连接。
main() 方法从命令行中提取 XST 和 XML文件的名称,同时设置诸如 UPDATE 等操作类型。由于 update_employees.xst
已经定义了 UPDATE操作,所以就没有必要来覆盖操作了,除非我们想介绍这种方法的使用。同样地,一旦设置好变量,我们就可以通过调用update.execute()方法来执行操作。
代码示例 -- main()
|
本文中所描述的源代码可以从 下载文件中获得。解压 下载文件,并将下列文件添加到工作目录:
plugins_directory/com.ibm.etools.sqltoxml/jars/sqltoxml.jar
plugins_directory/com.ibm.etools.sqltoxml/jars/xmltosql.jar
plugins_directory/org..apache.xerces/xercesImpl.jar
plugins_directory/org..apache.xerces/xmlParserAPIs.jar
db2java.zip
(DB2 JDBC driver) from your DB2 installation directory
下载文件还包含对您有用的这些文件:
build.bat
: 编译 UpdateEmployees.javaupdate.bat
: 数据库修改
要编译 UpdateEmployees.java
,请键入如下命令: > build
要执行该程序,请键入如下命令: > update update_employees.xst employees.xml
本文说明了如何使用WebSphere Studio Application Developer 中的 XML To SQL 向导和运行时 API来完成 XML 和关系数据库之间数据的来回转移。API 广泛用于支持JDBC驱动程序的各种数据库产品。而且,可以通过诸如连接池机制等其他方式来创建JDBC 连接。
最近,主流的数据库厂商开始在由数据库查询生成XML 领域采用 SQL/XML 标准。XQuery 的使用也开始出现。但是,由于这些标准当前都集中到了由查询生成XML 上,所以在这些标准成熟之前,SQLToXML和 XMLToSQL API 的组合使用将是 XM L和关系数据库之间进行数据转移的合理途径。
![]() |
Name | ![]() | Size | ![]() | Download method | ![]() | ||||||
xmltosql_sample_pgm.zip | ![]() | 4 KB | ![]() | HTTP | ![]() | ||||||
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |