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