QQRead:http://www.qqread.com/db2/q372730.html
XQuery 不支持参数占位符,所以将 XQuery 嵌入在 Java 应用程序中时,需要将 XQuery 封装(或嵌入)在 SQL 语句中。因此我们要用到 XMLQuery 函数,我们在这个例子中使用了该函数。
对于熟悉 JDBC的人来说,应该很快发现这个例子中大部分内容比较容易理解。该代码在声明和定义了必要的变量后,按照标准的 DB2 方法建立一个数据库连接。接着,创建一个包含查询语句的字符串。
我们这里要进行的操作是检索居住在具有给定邮政编码的地区的客户的地址。如果用XQuery来查询,应该是: 逻辑上,用XQuery查询的代码等价于下面给出的query代码,不同的是它:
将 XQuery 嵌入在一个 SQL SELECT 语句中。在 XQuery 被嵌入在 SQL 语句中时,它不再需要调用 db2-fn:xmlcolumn 或 db2-fn:sqlquery 来获得输入数据。相反,XQuery 通过由 PASSING 子句从 SQL 传递给它的变量来获得输入数据。
为邮政编码值使用参数占位符。
在查询字符串中需要使用双引号的地方使用换码符(反斜杠)。在这个例子中,PASSING 子句使用了换码符将变量 “t”、“y” 和 “z” 括起来。
显式地将输入参数的值覆盖为适当的数据类型。
然后准备好 SELECT 语句,将它的输入参数设置为目标值,这个值是在 Java “zipCode” 变量中定义的。我们在这里使用了 int 类型,最后,执行语句,按要求处理返回的结果,并关闭数据库连接。
嵌入XQuery的 Java 代码:
实际上,DB2 9的JDBC也支持XQuery,即我们没有必要将XQuery 嵌入在一个 SQL SELECT 语句中。可以直接执行XQuery,如上面的xquery for $y in db2-fn:xmlcolumn('CUSTOMERS.CONTACTINFO')/Customer/Address where $y/zip=95116 return $y
下面的代码与上面给出的代码是等价的,只是query不一样。 上面两段代码的执行结果为:
更多内容请看DB2、Java环境安装配置、DB2中的数据处理专题,或进入讨论组讨论。
XQuery 不支持参数占位符,所以将 XQuery 嵌入在 Java 应用程序中时,需要将 XQuery 封装(或嵌入)在 SQL 语句中。因此我们要用到 XMLQuery 函数,我们在这个例子中使用了该函数。
对于熟悉 JDBC的人来说,应该很快发现这个例子中大部分内容比较容易理解。该代码在声明和定义了必要的变量后,按照标准的 DB2 方法建立一个数据库连接。接着,创建一个包含查询语句的字符串。
我们这里要进行的操作是检索居住在具有给定邮政编码的地区的客户的地址。如果用XQuery来查询,应该是:
xquery for $y in db2-fn:xmlcolumn('CUSTOMERS.CONTACTINFO')/Customer/Address
where $y/zip=95116 return $y
将 XQuery 嵌入在一个 SQL SELECT 语句中。在 XQuery 被嵌入在 SQL 语句中时,它不再需要调用 db2-fn:xmlcolumn 或 db2-fn:sqlquery 来获得输入数据。相反,XQuery 通过由 PASSING 子句从 SQL 传递给它的变量来获得输入数据。
为邮政编码值使用参数占位符。
在查询字符串中需要使用双引号的地方使用换码符(反斜杠)。在这个例子中,PASSING 子句使用了换码符将变量 “t”、“y” 和 “z” 括起来。
显式地将输入参数的值覆盖为适当的数据类型。
然后准备好 SELECT 语句,将它的输入参数设置为目标值,这个值是在 Java “zipCode” 变量中定义的。我们在这里使用了 int 类型,最后,执行语句,按要求处理返回的结果,并关闭数据库连接。
嵌入XQuery的 Java 代码:
. . . // 连接数据库的代码,这里省略 . . . public static String getAddress() ...{ String Address; Address= null; try ...{ int zipCode = 95116; String query = "select xmlquery(" + " '$y/Customer/Address[zip=$z]' " + " passing contactinfo as \"y\", " + "cast (? as Integer) as \"z\") " + "from CUSTOMERS"; poStmt = conn.prepareStatement(query); poStmt.setInt(1, zipCode); rs = poStmt.executeQuery(); boolean flag = rs.next(); while (flag) ...{ Address= rs.getString(1); System.out.println(Address); flag = rs.next(); } } catch (SQLException sqle) ...{ System.out.println("Error Msg: " + sqle.getMessage()); System.out.println("SQLState: " + sqle.getSQLState()); System.out.println("SQLError: " + sqle.getErrorCode()); System.out.println("Rollback the transaction and quit the program"); System.out.println(); System.exit(1); } return Address; }
下面的代码与上面给出的代码是等价的,只是query不一样。
. . . // 连接数据库的代码,这里省略 . . . public static String getAddress() ...{ String Address; Address= null; try ...{ //int zipCode = 95116; String query="xquery for $y in
db2-fn:xmlcolumn('CUSTOMERS.CONTACTINFO')/Customer/Address
where $y/zip=95116 return $y"; poStmt = conn.prepareStatement(query); //poStmt.setInt(1, zipCode); rs = poStmt.executeQuery(); boolean flag = rs.next(); while (flag) ...{ Address= rs.getString(1); System.out.println(Address); flag = rs.next(); } } catch (SQLException sqle) ...{ System.out.println("Error Msg: " + sqle.getMessage()); System.out.println("SQLState: " + sqle.getSQLState()); System.out.println("SQLError: " + sqle.getErrorCode()); System.out.println("Rollback the transaction and quit the program"); System.out.println(); System.exit(1); } return Address; }
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<street>5401 Julio Ave.</street>
<city>San Jose</city>
<state>CA</state>
<zip>95116</zip>
</Address>
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- DB2 (429篇文章)
- Java环境安装配置 (5668篇文章)
- DB2中的数据处理 (475篇文章)
- Java编程开发手册 (8321篇文章)
- Wlan组网----家庭专题 (4217篇文章)
- DB2开发 (44篇文章)
- Java基础开发篇 (583篇文章)
- Java应用开发篇 (1088篇文章)
- 讲解一个标准规则的集合──DB2优化器 (0次浏览)
- 利用VS2005构建针对DB2的应用程序和Web站点 (0次浏览)
- 聚焦 DB2 的XML能力 (0次浏览)
- 教你提高商业智能环境中的DB2查询性能 (0次浏览)
- 用DB2 VS2005 .Net插件进行XML数据验证 (0次浏览)
- 针对VS2005 的IBM数据库插件概述 (0次浏览)
- DB2 “Viper 2”助力IT敏捷性 (0次浏览)
- DB2和Visual Studio .NET开发慨述 (0次浏览)
- 在WebLogic集群环境中使用DB2 Alphablox (0次浏览)
- Oracle与DB2、MySQL取前10条记录的对比 (0次浏览)



