XML 和 WebSphere Studio Application Developer - 第九部分:利用 XML更新数据库表
来源:互联网 发布:湖南大学网络教学 编辑:程序博客网 时间:2024/06/05 21:00
引言
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 之间的循环数据访问。
本文将由三个主要部分组成:
- 从 SQL查询生成XML
- 利用 XML 更新数据库表
- 使用 XMLToSQL API的样本应用程序
为了学习该样本,您需要安装WebSphere Studio ApplicationDeveloper 5.0 或 5.1。
从 SQL查询生成XML
- 我们首先使用在本系列的 第三部分用过的 VIDEOS 数据库。遵循 第三部分中的步骤来设置数据库并根据 EMPLOYEES 表创建 SQL 查询,如图 1 所示。
图 1 . 使用 SQL Builder 创建 SQL 查询
- 一旦 SQL 查询创建完毕,我们就将使用 XML From SQL 向导(图 2)带有其他构件(比如语法文件、缺省的 XSL 文件)的 XML 文件。在此之前,我们先在 VideoStoreProject 中创建一个文件夹来存储所有的结果构件。在本文中,我们将此文件夹命名为
Employees
。 - 打开向导,右键单击 select_employees,如图 1 所示,然后选择 Generate new XML...。选择 DTD作为 Schema 定义,将输出文件夹命名为
/VideoStoreProject/Employees
。
如图 2 所示。图 2. XML from SQL query 向导
- 单击 Finish从 SQL 查询生成 XML 构件作。这将会在在输出文件夹中生成 XML、DTD、XSL、和 HTML 文件。HTML 的结果如表 1 所示。
表 1. 生成的 SQL 查询结果 (
EMP_ID 名称 JOB_TITLE HIRE_DATE 存储 10Allan BakerManager2000-01-01111Carol DanManager2000-01-01220Eric FrankSales Rep2000-01-02121Garry HansAsst Sales Rep2000-02-01122Ivan JamesSales Rep2000-02-01212Karen LawManager2000-06-05323Mike NicholsSales Rep2000-06-063select_
employees.xml
)
在下一章节中,我们将修改结果 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提供了许多更新数据库的方法。在这一部分中,我们将通过 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。
图 3. 数据库连接页
- 在下一个对话框中(图 4),从 Action 下拉列表中选择 UPDATE,因为我们将更新 EMPLOYEES 表。(在其他的 Schema 中可能会存在同名的表,所以务必保证选择正确的 Schema。)
图 4. Action(和可选的 Schema ) 选择页
- 在 XML to SQL 向导的最后一页上,选择 JOB_TITLE和 STORE,它们是需要更新的列。标有钥匙图标的键列字段是不可选的。单击 Finish完成数据库表的更新。
图 5.
Columns 页
使用XMLToSQL API 的样本应用程序
在这一部分中,我们将开发一个使用 XMLToSQL API 进行 VIDEOS数据库更新的命令行应用程序。利用这个应用程序,您可以通过输入XML 文件来更新 Employees 表的记录、在 Employees表中插入新的记录或删除现有的记录。输入 XML文件的格式必须符合由SQL To XML向导生成 XML 文件的要求。此样本程序仅仅演示 API可以如何用来执行数据库操作。在 plugins_directory/com.ibm.etools.sqltoxml/jars/sqltoxml_javadoc.zip
上可以找到API的完整的Javadoc。
1. 准备 SQLProperties
该类用于提供XMLToSQL 更新数据库表所必需的数据。该类的实例用作 XMLToSQL 构造器的一个参数。
首先,创建一个 SQLProperties实例,同时提供目标操作(包括数据库用户 ID、密码,JDBC 连接信息以及SQL命令模式(比如更新、插入或删除))所必需的信息。这些信息可以通过该类的set 方法来获得,也可以外部 XST 文件(可以作为 SQL to XML的一部分生成)来提供。
下面的样本代码提供了使用 SET 方法所需的信息。
使用SQLProperties:
import com.ibm.etools.xmltosql.*;...SQLProperties prop = new SQLProperties(); prop.setLoginId("db2admin");prop.setPassword("db2admin");prop.setJdbcDriver("COM.ibm.db2.jdbc.app.DB2Driver");prop.setJdbcServer("jdbc:db2:VIDEOS");prop.setSchema("XMLTEST");prop.setAction(SQLProperties.UPDATE);
注意上面的代码片段,如果我们想提供我们自己的JDBC 连接信息,那么粗体部分就是不需要的。这可以调用MLToSQL.setConnection(java.sql.Connection)方法来完成。
对于我们的样本程序,我们将使用外部XST 文件来加载信息。文件内容如下所示:
update_employees.xst
:
<?xml version="1.0"?> <SQLGENERATEINFORMATION> <DATABASEINFORMATION> <LOGINID>db2admin</LOGINID> <PASSWORD>db2admin</PASSWORD> <JDBCDRIVER>COM.ibm.db2.jdbc.app.DB2Driver</JDBCDRIVER> <JDBCSERVER>jdbc:db2:VIDEOS</JDBCSERVER> </DATABASEINFORMATION> <OPTIONS> <SCHEMA>XMLTEST</SCHEMA> <ACTION>UPDATE</ACTION> </OPTIONS> </SQLGENERATEINFORMATION>
下面的代码显示了如何将XST 文件加载到 SQLProperties。
代码示例:loadProperties()
import com.ibm.etools.xmltosql.*;...private SQLProperties loadProperties(String propertiesFile) throwsException { SQLProperties prop = new SQLProperties(); prop.load(propertiesFile); return prop;}
2.创建 XMLToSQL 实例
一旦准备好SQLProperties,我们就需要去创建一个使用 XML 文档进行记录的添加、修改、删除操作的XMLToSQL 实例。XML结构和数据库表之间的映射关系是建立在一组映射规则上的。如下面的XML 片段所示:
XMLToSQL 映射规则
<RootElement> <EMPLOYEE> <FIRSTNAME>CHRISTINE</FIRSTNAME> <LASTNAME>HAAS</LASTNAME> </EMPLOYEE> <EMPLOYEE> <FIRSTNAME>MICHAEL</FIRSTNAME> <LASTNAME>THOMPSON</LASTNAME> </EMPLOYEE> ... </RootElement>
- 根元素可以包含 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()
import com.ibm.etools.xmltosql.*; import java.sql.*;public class UpdateEmployees ... private void execute(String propertiesFile, String xmlFile, Stringaction, Connection connection) throws Exception { SQLProperties prop = loadProperties(propertiesFile); prop.setAction(action); // override actionif we want a different action than the one set in SQLProperties XMLToSQL xml2sql = new XMLToSQL(prop); xml2sql.addToKeyColumns("EMP_ID"); xml2sql.addToUpdateColumns("JOB_TITLE"); xml2sql.addToUpdateColumns("STORE"); xml2sql.setTrace(true); if (connection != null) xml2sql.setConnection(connection); xml2sql.execute(xmlFile); } ... } // end UpdateEmployees
从上面的代码中可以发现三件有趣的事情,它展示了在配置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 就会改为使用此连接。该用户将负责清理随后操作中的连接。
3.执行程序
main() 方法从命令行中提取 XST 和 XML文件的名称,同时设置诸如 UPDATE 等操作类型。由于 update_employees.xst
已经定义了 UPDATE操作,所以就没有必要来覆盖操作了,除非我们想介绍这种方法的使用。同样地,一旦设置好变量,我们就可以通过调用update.execute()方法来执行操作。
代码示例 -- main()
import com.ibm.etools.xmltosql.*;import java.sql.*;...static public void main(String[] args) { String propertiesFile = args[0]; String xmlFile = args[1]; String action = SQLProperties.UPDATE; Connection connection = null; try { UpdateEmployees update = new UpdateEmployees(); update.execute(propertiesFile,xmlFile,action,connection); } catch (Exception e) { System.out.println("Error updating Videos database:" + e); }}
本文中所描述的源代码可以从 下载文件中获得。解压 下载文件,并将下列文件添加到工作目录:
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和关系数据库之间进行数据转移的合理途径。
下载
- XML 和 WebSphere Studio Application Developer - 第九部分:利用 XML更新数据库表
- XML 和 WebSphere Studio Application Developer: 第 8 部分:探究 XML to XML Mapping Editor
- XML 和 WebSphere Studio Application Developer — 第 3 部分: SQL 和 XML
- XML 和 WebSphere Studio Application Developer,第 1 部分:开发 XML Schema
- XML 和 WebSphere Studio Application Developer — 第 4 部分: 研究 XML Editor
- XML 和 WebSphere Studio Application Developer,第 5 部分:探究 RDB to XML Mapping Editor
- XML 和 WebSphere Studio Application Developer — 第 2 部分: 创建 SQL 查询
- XML 和 WebSphere Studio Application Developer - 第 7 部分: 使用 XSL Editor 和 XSL Debugger 开发 XSL 样式表
- XML 和 WebSphere Studio Application Developer — 第 6 部分: 使用 XML Schema 和 XML Editor 揭开 XML 名称空间神秘的面纱
- 使用 WebSphere Studio Application Developer 创建数据库应用程序
- 使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用程序: 第 1 部分
- 使用 WebSphere Studio Application Developer 调试器调试 WebSphere 应用: 第 2 部分
- websphere更新web.xml
- WebSphere Studio Application Developer 移植指南
- WebSphere Studio Application Developer 5.0 优化设置
- 使用 WebSphere Studio Application Developer 的 WebSphere Portal Server 开发: 第 1 部分:Portal Server 2.1 的动态主题定制
- WebSphere Studio Application Developer 中的 Web 应用程序入门
- WebSphere Studio Application Developer 中的 Web Applications 入门
- XML 和 WebSphere Studio Application Developer — 第 6 部分: 使用 XML Schema 和 XML Editor 揭开 XML 名称空间神秘的面纱
- 技术是实践,思想是理论
- XML 和 WebSphere Studio Application Developer - 第 7 部分: 使用 XSL Editor 和 XSL Debugger 开发 XSL 样式表
- XML 和 WebSphere Studio Application Developer: 第 8 部分:探究 XML to XML Mapping Editor
- (转载)堆和栈的区别
- XML 和 WebSphere Studio Application Developer - 第九部分:利用 XML更新数据库表
- flash与PHP的交互技巧
- [幽默笑话]笑话四则
- Notebook动态添加组件。。
- sharepoint : MSN智能感知的一点问题
- PHP双色球分析
- [观点][幽默网文]所谓......(全集)
- 下一代Windows Shell
- 标题