快速业务通道

跨多个数据源的J2EE开发: 细节探讨 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
变得更加艰苦了。

查询 1 很简单,仅涉及 PART 数据。即使这样,我们还是必须写四条 SELECT 语句、 一条 INSERT 语句和一条 DELETE 语句来完成我们的工作。如果您仔细观察从每个后端数 据源检索数据的三条 SELECT 语句,您会看到由于 SQL 方言的差异,这三条语句略有不同 。尤其请注意 DB2 UDB 和 Oracle 在支持检索结果集的前 20 行方面是如何的不同。也要 注意对于 Excel 这项功能不可用。

最后,我们将提到取消限制每个数据源返回的结果集的大小并不总是对的。它对这个查 询的语义没有损害,但是对查询 3 的语义却有损害,我们将在稍后讨论这些。

跨多个数据源的J2EE开发: 细节探讨(7)

时间:2011-04-11 IBM C. M. Saracco

以下是使用直接数据访问来支持查询 1 的 servlet 的 SQL 代码:

// ------------------------- DB2 remote ------------------------- // select for query #1 query1[1]= "SELECT DISTINCT p_partkey, p_name, p_mfgr, p_type " +   "FROM tpcd.part " +   "WHERE p_type LIKE ? " +   "AND p_name LIKE ? " +   "ORDER BY p_partkey " +   "FETCH FIRST 20 ROWS ONLY"; // ------------------------ Oracle remote ----------------------- // select for query #1 query1[2]= "SELECT * FROM (" +   "SELECT p_partkey, p_name, p_mfgr, p_type " +   "FROM part " +   "WHERE p_type LIKE ? " +   "AND p_name LIKE ? " +   "ORDER BY p_partkey" +   ") WHERE ROWNUM <= 20"; // ------------------------ Excel local ----------------------- // select for query #1 query1[3]= "SELECT p_partkey, p_name, p_mfgr, p_type " +   "FROM [part$] " +   "WHERE p_type LIKE ? " +   "AND p_name LIKE ?"; // insert statement for intermediate data for query #1 temp_insert[1]= "INSERT INTO temp_query1(p_partkey, p_name, p_mfgr, p_type) "    + "VALUES(?, ?, ?, ?)"; // final statement for query #1 temp_select[1]= "SELECT DISTINCT * " +   "FROM temp_query1 " +   "ORDER BY p_partkey " +   "FETCH FIRST 20 ROWS ONLY"; // delete statements for temporary table temp_delete[1] = "DELETE FROM temp_query1";

查询 2 没有任何特别的问题。从概念上讲,它的实现和查询 1 几乎相同。我们必须写 四条 SELECT 语句、一条 INSERT 语句和一条 DELETE 语句来完成我们的工作。对于其中 的三条 SELECT 语句,我们实际上取用查询 2 的原始版本、用参数标记替换硬编码搜索值 、修改 Excel 数据的 FROM 子句的语法之后这些语句就可以执行了。INSERT 语句只是从 每个数据源取得结果并将它们存放到本地辅助表。我们的第四条 SELECT 语句对该表执行 操作并且该语句的语法是原始查询简略版本。(我们省略了连接和搜索谓词,因为它们已 经在前三条 SELECT 语句中应用了。)最后,我们发出一条简单的 DELETE 语句来清除辅 助表中的内容。

为了保证完整性,我们在下面列出了我们的 servlet 中查询 2 的 SQL 代码。

// ------------------------- DB2 remote ------------------------- // select for query #2 query2[1]= "SELECT ps_partkey, s_name, s_suppkey, MIN(ps_supplycost) AS min_supplycost " +   "FROM tpcd.partsupp, tpcd.supplier, tpcd.nation " +   "

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号