大家谈了很多,我觉得这个东西比较难以作出判断(因为我们都没有办法做性能测试),所以我们应该以大公司的通常使用方式作为参考(他们为了推销自己的产品,绞尽了脑汁提高性能,这个地方他不会不注意的,因为这里是很耗时间的一个环节)
bea的petstore中就使用了arrayList,我想我们完全可以采用这种数据传递方式:
Connection connection = getDataSource().getConnection();
PreparedStatement preparedstatement = connection.prepareStatement("select COUNT(*) from (category a join category_details b on a.catid=b.catid) where locale = ?", 1004, 1007);
preparedstatement.setString(1, locale.toString());
ResultSet resultset = preparedstatement.executeQuery();
resultset.first();
int k = resultset.getInt(1);
resultset.close();
preparedstatement.close();
preparedstatement = connection.prepareStatement("select a.catid, name, descn from (category a join category_details b on a.catid=b.catid) where locale = ? order by name", 1004, 1007);
preparedstatement.setString(1, locale.toString());
resultset = preparedstatement.executeQuery();
Page page;
if(i >= 0 && i < k)
{
ArrayList arraylist = new ArrayList();
resultset.absolute(i + 1);
do
arraylist.add(new Category(resultset.getString(1).trim(), resultset.getString(2), resultset.getString(3)));
while(resultset.next() && --j > 0);
page = new Page(arraylist, i, k);
} else
{
page = Page.EMPTY_PAGE;
}
resultset.close();
preparedstatement.close();
connection.close();
其中的page类的定义如下:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Update: 李颖聪 e-mail: liyingcong@163.net QQ: 245556
// Source File Name: Page.java
package com.sun.j2ee.blueprints.catalog.model;
import java.io.Serializable;
import java.util.*;
public class Page
implements Serializable
{
public static final Page EMPTY_PAGE;
List objects;
int start;
int containingListSize;
public Page(List list, int i, int j)
{
objects = new ArrayList(list);
start = i;
containingListSize = j;
}
public List getList()
{
return objects;
}
public int getSize()
{
return objects.size();
}
public int getStartOfNextPage()
{
return start + objects.size();
}
public int getStartOfPreviousPage()
{
return Math.max(start - objects.size(), 0);
}
public boolean hasNextPage()
{
return start + objects.size() < containingListSize;
}
public boolean hasPreviousPage()
{
return start > 0;
}
static
{
EMPTY_PAGE = new Page(Collections.EMPTY_LIST, 0, 0);
}
}