首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中实现虚拟列表

在Java中实现虚拟列表
EN

Stack Overflow用户
提问于 2009-07-28 10:27:17
回答 2查看 496关注 0票数 1

我需要从Java (10-20k)的RDBMS中获取许多记录,我的目标系统希望它们以Java列表的形式可用。所以我想把我的代码实现为“虚拟列表”,实际上我只获取我实际需要的记录。我希望SQL像这样

SELECT * FROM CUSTOMER WHERE COUNTRY="Moldovia“

作为参数,只返回所请求的内容。最有可能的情况是,数据是以50个为一批请求的。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-28 12:00:18

除非您希望客户端随机访问数据,否则最好返回一个迭代器。另外,请看一下ResultSet.setFetchSize:http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html#setFetchSize(int)

所以就像这样:

代码语言:javascript
复制
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
  }
}
票数 2
EN

Stack Overflow用户

发布于 2009-07-28 10:40:47

在查询中使用偏移量和限制:

SELECT * FROM CUSTOMER WHERE COUNTRY="Moldovia“LIMIT 50偏移量50

当然,假设您的SQL方言允许这样做。该示例将返回第51-100行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1193233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档