我需要从Java (10-20k)的RDBMS中获取许多记录,我的目标系统希望它们以Java列表的形式可用。所以我想把我的代码实现为“虚拟列表”,实际上我只获取我实际需要的记录。我希望SQL像这样
SELECT * FROM CUSTOMER WHERE COUNTRY="Moldovia“
作为参数,只返回所请求的内容。最有可能的情况是,数据是以50个为一批请求的。有什么建议吗?
发布于 2009-07-28 12:00:18
除非您希望客户端随机访问数据,否则最好返回一个迭代器。另外,请看一下ResultSet.setFetchSize:http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html#setFetchSize(int)
所以就像这样:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
public class FooResultSetIterator implements Iterator<Foo>
{
private final ResultSet resultSet;
private boolean hasNext;
FooResultSetIterator(final ResultSet resultSet, final int fetchSize) throws SQLException
{
this.resultSet = resultSet;
this.resultSet.setFetchSize(fetchSize);
this.hasNext = resultSet.next();
}
@Override
public boolean hasNext()
{
return hasNext;
}
@Override
public Foo next()
{
final Foo foo = new Foo(resultSet);
try
{
this.hasNext = resultSet.next();
}
catch (final SQLException e)
{
throw new RuntimeException(e);
}
return foo;
}
@Override
public void remove()
{
throw new UnsupportedOperationException("Cannot remove items from a ResultSetIterator");
}
}
class Foo
{
public Foo(ResultSet resultSet)
{
// TODO Auto-generated constructor stub
}
}发布于 2009-07-28 10:40:47
在查询中使用偏移量和限制:
SELECT * FROM CUSTOMER WHERE COUNTRY="Moldovia“LIMIT 50偏移量50
当然,假设您的SQL方言允许这样做。该示例将返回第51-100行。
https://stackoverflow.com/questions/1193233
复制相似问题