在OracleJDeveloper中创建XSQL查询
PL/SQL 常被用于创建到数据库的连接、生成表、检索结果集和执行更新。来自使用 PL/SQL 的 SQL 查询的结果集当然是一个文本表。随着在 J2EE 应用程序中使用 XML 逐渐增多,许多 J2EE 开发 人员现在需要将这种结果表示为 XML 文档,以交换数据。 包含在 Oracle
PL/
SQL 常被用于创建到
数据库的连接、生成表、检索结果集和执行更新。来自使用 PL/
SQL 的 SQL 查询的结果集当然是一个文本表。随着在 J2EE 应用程序中使用 XML 逐渐增多,许多 J2EE
开发人员现在需要将这种结果表示为 XML 文档,以交换数据。
包含在
Oracle JDeveloper 10g 中的
Oracle XSQL Servlet 工具支持 SQL 查询的处理以及将结果集作为 XML 输出。有可能要求 XML 输出是一种不同的格式或者可能需要修改输出,因此为了这些目的,XSQL Servlet 也支持 XSLT 转换。
XSQL 文件(.xsql 文件)利用 <xsql:query></xsql:query> 标记包含 SQL 查询语句。XSQL 还可以通过 <xsql:dml></xsql:dml> 标记来创建或更新数据库。XSQL 通过在 XSQL 页面中指定样式表来支持 XSLT 转换。在这篇技术说明中,我们将利用 XSQL 来查询一个包含了目录的示例数据库表。然后我们将通过 XSLT 转换将 XML 输出显示为 HTML 表。
准备安装 使用 XSQL 创建/查询的数据库表在 Oracle 数据库中创建。在这篇教程中使用了 Oracle 数据库 10g 来创建数据库表。
首先,创建和启动 Oracle 数据库的一个例程。然后与数据库连接,并且 SYS 模式(用户名)为 SYSDBA。
CONNECT SYS/<password> AS SYSDBA
然后使用下面的 SQL 脚本来创建一个包含了示例 Oracle 目录的数据库表:
CREATE TABLE OracleCatalog(Journal VARCHAR(25), Publisher Varchar(25),
Edition VARCHAR(25), Title Varchar(45), Author Varchar(25));
INSERT INTO OracleCatalog VALUES('Oracle Magazine', 'Oracle Publishing',
'November-December 2003', 'Servlets and JSP Step Up', 'Budi Kurniawan');
INSERT INTO OracleCatalog VALUES('Oracle Magazine', 'Oracle Publishing',
'September-October 2003', 'Parsing XML Efficiently', 'Julie Basu');
我们将在 JDeveloper 10g 生产版中运行示例 XSQL。
下载并安装 JDeveloper 10g 生产版;然后创建一个新的项目(如图 1 所示)。
创建数据库连接
XSQL 查询需要一条数据库连接。要在 JDeveloper 中创建数据库连接,请选择连接导航器中的 Connections>Database 节点(如图 2 所示)。
图 2:导航器中的数据库节点 然后显示连接向导(如图 3 所示)。
图" 3:连接向导:类型 在连接向导中指定一个连接名称和连接类型,然后单击 Next 按钮。在显示的下一个框架中,指定一个用户名和口令,然后单击 Next 按钮。
在随后的 Connection 框架中指定一个 JDBC 驱动程序、主机名、JDBC 端口和数据库 SID,然后单击 Next 按钮(如图 4 所示)。
图 4:连接向导:连接 在随后的 Test 框架中,单击 Test Connection 按钮,
测试 JDBC 连接(参见图 5)。单击 Finish 按钮,配置数据库连接。
图 5:连接向导:测试 如图 6 所示,您将看到在应用程序导航器中一个连接节点添加到了 Connections>Database 节点中。
图 6:连接节点 与数据库的连接还可能通过修改 <JDeveloper>/jdev/system9.0.5.1.1605/XSQLConfig.xml 文件来创建。<JDeveloper> 是安装 JDeveloper 10g 的目录;可能已设定了运行应用
服务器的用户拥有对 XSQLConfig.xml 文件的读权限。在 XSQLConfig.xml 中的 <connectiondefs> 元素中增加一个 <connection> 元素,以指定要创建的连接。利用 SYSTEM 模式创建一条连接。
<connection name="dbConnection">
<username>SYSTEM</username>
<password></password>
<dburl>jdbc:
oracle:thin:@<HOST>:<PORT>:<SID></dburl>
<driver>oracle.jdbc.driver.OracleDriver</driver>
</connection>
属性 name 是连接名称
元素 username 是用来登录到数据库中的用户名
元素 password 是用来登录到数据库中的口令
元素 dburl 是数据库的 URL
元素 driver 是用来与数据库连接的 JDBC 驱动程序
<HOST> 是 Oracle 10g 生产版的数据库主机
<PORT> 是数据库端口
<SID> 是数据库 SID
接下来,将 XSQLConfig.xml 拷贝到 JDeveloper 中的项目源代码目录中。我们将使用在 XSQLConfig.xml 文件中配置的连接 dbConnection 来指定 XSQL 页面的 <page> 标记中连接属性的值。
XSQL 的 Oracle 10g 版本(Oracle 10g XDK 的一部分)也支持新的利用 J2EE 容器定义的 JDBC 数据源的能力,这从 XSQLConfig.xml 文件中消除了连接定义,并将连接池的管理推迟到了 J2EE 容器中。用于数据库连接的数据源在 XSQL 页面的 <page> 标记的 connection 属性中指定。因为 J2EE 容器一般支持为它们的 JDBC 连接定义进行口令加密,因此这种方法在某些情况下甚至可能更
安全。(请参阅 Oracle 10g XSQL 版本说明的“使用 Servlet 容器的数据源实施”一节,以获取更多的详细信息。)
在 XSQL 页面中处理 XSQL 查询 现在让我们在 JDeveloper 中创建一个 XSQL 页面 (queryDb.xsql)。要创建一个 XSQL 文件,请选择应用程序导航框架中的项目节点。在下一个框架中,选择 General>XML。在列出的项目中选择 XSQL Page。这将生成一个 XSQL 页面(如图 7 所示)。
图 7:XSQL 页面 接下来我们将在 XSQL 页面中添加 <xsql:query></xsql:query> 标记,以处理我们的 XSQL 查询。XSQL 查询的应用程序可能需要使用绑定变量(SQL 语句中的变量)。可以使用 URL 参数、会话变量、cookie 值或页面参数的值来设置绑定变量。在我们的例子中我们将使用页面参数来设置 XSQL 查询绑定变量。
使用 <xsql:query> 标记中的 bind-params 属性指定的绑定变量用于<xsql:query> 标记内部的 SQL 语句。绑定变量在 SQL 语句中用 '?' 表示。绑定参数的值用 <xsql:set-page-params/> 标记指定。在本节和以下章节中,XSQL 查询中使用的数据库表的名称应该加上创建表的模式作为前缀。在本教程中,数据库表 OracleCatalog 在 SYS 模式中创建。在 XSQL 查询的 SQL 语句中用 SYS 作为 OracleCatalog 表的前缀。例如,从 FROM SYS.OracleCatalog 选择 JOURNAL、PUBLISHER、EDITION、TITLE 与 AUTHOR。
<page xmlns:xsql="urn:oracle-xsql" connection="dbConnection">
<xsql:set-page-param name="JOURNAL" value="Oracle Magazine"/>
<xsql:set-page-param name="PUBLISHER" value="Oracle Publishing"/>
<xsql:query xmlns:xsql="urn:oracle-xsql"
bind-params="JOURNAL PUBLISHER">
select JOURNAL, PUBLISHER, EDITION,
TITLE, AUTHOR from OracleCatalog WHERE JOURNAL=?AND PUBLISHER=?
</xsql:query>
</page>
可以从 XSQL 组件板中添加 <xsql:query></xsql:query> 标记(如图 8 所示)。
图" 8:XSQL 组件板中的查询组件 页面标记中的属性连接指定了用来查询数据库的连接。我们的 XSQL 页面 queryDb.xsql 在图 9 中显示。
图 9:queryDb.xsql XSQL 页面 要运行 queryDb.xsql,右键单击应用程序导航器中的 queryDb.xsql 节点,并选择 Run,如图 10 所示。
图" 10:运行 queryDb.xsql XSQL 查询的结果是一个 XML 文档;XSQL 页面 queryDb.xsql 在默认的浏览器中显示 XSQL 查询的 XML 输出。我们的 XSQL 查询如下所示。
- <page>
- <ROWSET>
- <ROW num="1">
<JOURNAL>Oracle Magazine</JOURNAL>
<PUBLISHER>Oracle Publishing</PUBLISHER>
<EDITION>November-December 2003</EDITION>
<TITLE>Servlets and JSP Step Up</Title>
<AUTHOR>Budi Kurniawan</AUTHOR>
</ROW>
- <ROW num="2">
<JOURNAL>Oracle Magazine</JOURNAL>
<PUBLISHER>Oracle Publishing</PUBLISHER>
<EDITION>September-October 2003</EDITION>
<TITLE>Parsing XML Efficiently</Title>
<AUTHOR>Jilua Basu</AUTHOR>
</ROW>
</ROWSET>
</page>
接下来我们将检查在 XSQL 查询中使用的不同的 <xsql:query> 标记属性。
设置 XSQL 查询属性 <xsql:query> 标记不仅提供 XSQL 属性来修改使用 XSQL 查询检索的数据,还提供 XSQL 属性来修改使用 XSQL 查询产生的 XML 文档。不同的 XSQL 属性和它们的应用在表 1 中列出。
如前所述,<xsql:query> 标记和属性集可以通过 XSQL 组件板中的 Query 组件添加到 queryDb.xsql 中。首先,选择 XSQL 组件板中的 Query Component。显示一个 Query 框架(如图 11 所示)。接下来,为不同的 <xsql:query> 属性指定值。
[[The No.11Picture.]] 图 11:查询框架 现在在 <xsql:query/> 标记中添加一个 SQL 查询。queryDb.xsql XSQL 页面和查询属性集在图 12 中显示。
图" 12:queryDb.xsql 和查询属性 通过右键单击应用程序导航框架中的 queryDb.xsql 节点并选择 Run 来运行 queryDb.xsql。XSQL 查询的结果集在您的默认浏览器中显示(如下所示)。
- <page>
- <Catalog>
- <Journal-Edition Id="2">
<JOURNAL>Oracle Magazine</JOURNAL>
<PUBLISHER>Oracle Publishing</PUBLISHER>
<EDITION>September-October 2003</EDITION>
<TITLE>Parsing XML Efficiently</Title>
<AUTHOR>Julie Basu</AUTHOR>
</Journal-Edition>
</Catalog>
</page>
在下一节中,我们将讨论对来自 XSQL 查询的输出进行 XSLT 转换。
利用 XSQL 转换输出 现在我们将创建一个 XSLT 文件,以在 JDeveloper 中转换 XSQL 输出。在 Categories 框架中选择 File>Newand,然后选择 Categories:General>XML。从列出的项目中选择 XSLT Stylesheet(如图 13 所示)。
图 13:创建一个 XSLT 样式表 在显示的框架中指定目录名称和一个 XSLT 文件名称。现在在 JDeveloper 中修改 XSLT 文件。用来从 XSQL 查询的 XML 输出中生成 HTML 表的 XSLT 显示如下。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="ISO-8859-1" method="text/html" />
<xsl:template match="/page">
<html>
<head>
<title>Oracle Catalog</title>
</head>
<body>
<table border="1" cellspacing="0">
<tr>
<th>Journal</th>
<th>Publisher</th>
<th>Edition</th>
<th>Title</th>
<th>Author</th>
</tr>
<xsl:for-each select="ROWSET/ROW">
<tr>
<td><xsl:value-of select="JOURNAL"/></td>
<td><xsl:value-of select="PUBLISHER"/></td>
<td><xsl:value-of select="EDITION"/></td>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="AUTHOR"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT 文件本身 OracleCatalog.xsl 在图 14 中显示。
图" 14:OracleCatalog.xsl 现在增加以下引用,以指定 OracleCatalog.xsl 将在用来查询数据库的 XSQL 文件(queryDb.xsql)中转换 XSQL 查询输出:
<?xml-stylesheet type="text/xsl" href="OracleCatalog.xsl"?>
作为结果产生的 XSQL 文件在图 15 中显示。
图 15:queryDb.xsql 和样式表 最后,在 JDeveloper 中运行 queryDb.xsql(如图 16 所示)。
图" 16:运行 queryDb.xsql 带 XSLT 转换的 XSQL 查询输出在默认浏览器中的一个 HTML 表中显示(如下所示):
您刚刚使用了 JDeveloper 10g 中的 XSQL Servlet 工具来查询一个数据库表,然后利用一个 XSLT 样式表对作为结果产生的 XML 输出进行了转换。
原文转自:http://www.ltesting.net
|