WebSphere数据库更新技巧二则

发表于:2007-06-22来源:作者:点击数: 标签:
优化数据访问不是一件容易的事情——即使程序的 性能 很差,应用也不会抛出异常;即使程序包含了许多差劲的JDBC用法,编译器也不会发出警告;即使 网络 快要被庞大的通信量吞噬,也没有一种 数据库 工具能够方便地检测出拙劣的数据请求。 然而,当你把JDBC应

     优化数据访问不是一件容易的事情——即使程序的性能很差,应用也不会抛出异常;即使程序包含了许多差劲的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就可以得到最小的唯一性索引。

原文转自:http://www.ltesting.net