商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

DB2 9应用开发:Java应用程序中嵌入XQuery


IT168技术文档】 
    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查询的代码等价于下面给出的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 代码:
. . . // 连接数据库的代码,这里省略 . . . 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; }
    实际上,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不一样。
. . . // 连接数据库的代码,这里省略 . . . 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>
1 2
【内容导航】
第1页: 准备 第2页: 在Java 应用程序中嵌入 XQuery
©版权所有。未经许可,不得转载。
[责任编辑:郭宗一]