频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者:IT168 gmplayer 出处:巧巧读书 2007-11-01 进入讨论组
上一页 1 2 
QQRead:http://www.qqread.com/db2/q372730.html
    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>
更多文章 更多内容请看DB2Java环境安装配置DB2中的数据处理专题,或进入讨论组讨论。
上一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章