DB2 9应用开发:Java应用程序中嵌入XQuery
2007-11-01 22:18:44 来源:WEB开发网核心提示: 谢谢收藏 http://www.cncms.com.cn/db2/q372730.html XQuery 不支持参数占位符,所以将 XQuery 嵌入在 Java 应用程序中时,DB2 9应用开发:Java应用程序中嵌入XQuery(2),需要将 XQuery 封装(或嵌入)在 SQL 语句中,因此我们要用到 xm
谢谢收藏 http://www.cncms.com.cn/db2/q372730.html
XQuery 不支持参数占位符,所以将 XQuery 嵌入在 Java 应用程序中时,需要将 XQuery 封装(或嵌入)在 SQL 语句中。因此我们要用到 xml(标准化越来越近了)Query 函数,我们在这个例子中使用了该函数。
对于熟悉 JDBC的人来说,应该很快发现这个例子中大部分内容比较容易理解。该代码在声明和定义了必要的变量后,按照标准的 DB2 方法建立一个数据库连接。接着,创建一个包含查询语句的字符串。
我们这里要进行的操作是检索居住在具有给定邮政编码的地区的客户的地址。如果用XQuery来查询,应该是:
将 XQuery 嵌入在一个 SQL SELECT 语句中。在 XQuery 被嵌入在 SQL 语句中时,它不再需要调用 db2-fn:xml(标准化越来越近了)column 或 db2-fn:sqlquery 来获得输入数据。相反,XQuery 通过由 PASSING 子句从 SQL 传递给它的变量来获得输入数据。
为邮政编码值使用参数占位符。
在查询字符串中需要使用双引号的地方使用换码符(反斜杠)。在这个例子中,PASSING 子句使用了换码符将变量 “t”、“y” 和 “z” 括起来。
显式地将输入参数的值覆盖为适当的数据类型。
然后准备好 SELECT 语句,将它的输入参数设置为目标值,这个值是在 Java “zipCode” 变量中定义的。我们在这里使用了 int 类型,最后,执行语句,按要求处理返回的结果,并关闭数据库连接。
嵌入XQuery的 Java 代码:
下面的代码与上面给出的代码是等价的,只是query不一样。
XQuery 不支持参数占位符,所以将 XQuery 嵌入在 Java 应用程序中时,需要将 XQuery 封装(或嵌入)在 SQL 语句中。因此我们要用到 xml(标准化越来越近了)Query 函数,我们在这个例子中使用了该函数。
对于熟悉 JDBC的人来说,应该很快发现这个例子中大部分内容比较容易理解。该代码在声明和定义了必要的变量后,按照标准的 DB2 方法建立一个数据库连接。接着,创建一个包含查询语句的字符串。
我们这里要进行的操作是检索居住在具有给定邮政编码的地区的客户的地址。如果用XQuery来查询,应该是:
xquery for $y in db2-fn:xml(标准化越来越近了)column('CUSTOMERS.CONTACTINFO')/Customer/Address逻辑上,用XQuery查询的代码等价于下面给出的query代码,不同的是它:
where $y/zip=95116 return $y
将 XQuery 嵌入在一个 SQL SELECT 语句中。在 XQuery 被嵌入在 SQL 语句中时,它不再需要调用 db2-fn:xml(标准化越来越近了)column 或 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 xml(标准化越来越近了)query(" + " '$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:xml(标准化越来越近了)column('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:xml(标准化越来越近了)column('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 xml(标准化越来越近了)ns:xsi="http://www.w3.org/2001/xml(标准化越来越近了)Schema-instance">
<street>5401 Julio Ave.</street>
<city>San Jose</city>
<state>CA</state>
<zip>95116</zip>
</Address>
更多精彩
赞助商链接