• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

WebSphere数据库更新技巧二则

发布: 2007-6-22 21:40 | 作者: 仙人掌工作室译  | 来源: 中国计算机报  | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网

     优化数据访问不是一件容易的事情——即使程序的性能很差,应用也不会抛出异常;即使程序包含了许多差劲的JDBC用法,编译器也不会发出警告;即使网络快要被庞大的通信量吞噬,也没有一种数据库工具能够方便地检测出拙劣的数据请求。

然而,当你把JDBC应用连接到WebSphere应用服务器时,仍可以采取一些措施让应用更加高效。例如,下面两则技巧能够有效地提高更新数据库数据的性能。

  一、使用updateXXX方法

  虽然用程序代码更新数据库的办法不一定适用于所有的场合,但大家应该已经试过用程序执行更新和删除操作了。ResultSet对象的updateXXX方法让我们不必构造复杂的SQL命令就可以执行数据更新操作,我们只要提供待更新的列和数据,然后在把游标移出结果集的当前行之前,调用updateRow方法更新数据库。在下面的例子中,getInt方法提取出ResultSet对象Age列的值:

  int n = rs.getInt("Age");
  // n包含rs结果集中Age列的值
  . . .
  rs.updateInt("Age", 25);
  rs.updateRow();

  updateInt方法将Age列的值更新为25,updateRow方法更新数据库中包含被修改数据的行。

  用程序代码更新数据库不仅改善了应用的可维护性,而且往往还提高了性能。这是因为,数据库服务器已经在处理SELECT语句的过程中找到了待修改行的位置信息,不必再次执行代价昂贵的操作来寻找要修改的行。如果你确实需要该行的位置,数据库服务器通常能够提供可用行的内部指针,例如ROWID之类。

  二、使用getBestRowIndentifier

  利用getBestRowIndentifier(),我们可以确定在WHERE子句中最好用哪些列的集合。伪列通常是速度最快的数据访问标识,但要确定这类列只能通过getBestRowIndentifier()。

  有些应用程序不能利用定位式数据更新和删除方式的优势,这时,可以通过调用getPrimaryKeys()或getIndexInfo()来找出属于唯一性索引的列,再用所有可搜索的列构造WHERE子句。这个办法一般都有效,只是可能使最后得到的查询变得相当复杂。考虑下面这个例子:

  ResultSet WSrs = WSs.executeQuery
("SELECT user_name, ssn, address, city,
state, zip
FROM emp");
  // 提取数据
  ...
  WSs.executeQuery ("UPDATE EMP SET ADDRESS = ?
  WHERE user_name = ? and ssn = ?
  and address = ? and city = ? and state = ?
  and zip = ?");
  // 相当复杂的查询

  应用程序应当调用getBestRowIndentifier()来找出唯一地标识数据库记录的最优列集合(也许是一个伪列)。许多数据库管理系统支持一些特殊的列,这些列不是用户在定义表结构的时候显式定义的,而是每一个表都有的隐含列(例如,ROWID,TID)。这些列称为伪列,由于它们的值通常是直接指向记录精确位置的指针,因此通过伪列访问数据通常是最快的访问方式。另外,由于伪列不是用户定义表结构的时候显式定义的,所以调用getColumns方法返回的结果中不会包含伪列。要确定是否有伪列可用,应当调用getBestRowIndentifier()。

  如果数据源不包含特殊的伪列,getBestRowIndentifier()的结果集包含了指定表的最优唯一索引的列集合(如果存在唯一性索引的话)。也就是说,应用程序不必再调用getIndexInfo就可以得到最小的唯一性索引。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网