PETSTORE分页的疑惑,请板桥指教!

roadbai

看了一下PETSTORE的分页和各位以前的讨论,对PETSTORE的分页程序有个疑问。在PETSTROE中是用返回PAGE类来分页的,每次只返回一页的数据,但是好像每次调用下一页的时候应该执行类似以下的GET方法,这样岂不是每次都去查询一次数据库(rs = ps.executeQuery();),我觉得应该有把第一次查询结果缓存的做法,还是我的理解有问题?请板桥指教!

public Page getProducts(String categoryID, int start,
int count, Locale l)
throws CatalogDAOSysException {

Connection c = null;
PreparedStatement ps = null;
ResultSet rs = null;
Page ret = null;

try {
c = getDataSource().getConnection();

ps = c.prepareStatement("select a.productid, name, descn "
+ "from (product a join "
+ "product_details b on "
+ "a.productid=b.productid) "
+ "where locale = ? "
+ "and a.catid = ? "
+ "order by name",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ps.setString(1, l.toString());
ps.setString(2, categoryID);
rs = ps.executeQuery();
if (start >= 0 && rs.absolute(start+1)) {
boolean hasNext = false;
List items = new ArrayList();
do {
items.add(new Product(rs.getString(1).trim(),
rs.getString(2).trim(),
rs.getString(3).trim()));
} while ((hasNext = rs.next()) && (--count > 0));
ret = new Page(items, start, hasNext);
}
else {
ret = Page.EMPTY_PAGE;
}

rs.close();
ps.close();

c.close();
return ret;
}
catch (SQLException se) {
throw new CatalogDAOSysException("SQLException: "
+ se.getMessage());
}
}

zingers
2002-10-28 15:51

引用:
所以即使有一百万条记录,也不过是一万个指点针

按照你的说法,如果取全部纪录,应该是二百万个地址,因为ResultSet保存了记录号和当前列号啊?

roadbai
2002-10-29 13:30

非常感谢各位大师的讨论,尤其是“FUCK",让我又学了不少东西,看来高手这儿还是很多的!:)
还有一个问题也是关于Petstore的,就是它的分页的导航条的HTML代码是在什么地方写到JSP中的,是某个TAGLIB,还是某个JAVA文件中的?
请指点!