java - 通过分页显示 20,000 条记录

标签 java jsp servlets pagination opencsv

我需要读取包含 20,000 条记录的 CSV 文件。我无法一次将所有这些记录放入一个列表中。我们没有使用任何数据库。我们正在通过 openCSV 框架读取 CSV。 请告诉我一些方法,以便我可以按部分读取 csv 部分并将列表发送到 Servlet 进行分页。这是我开始实现分页的代码示例,但它不起作用。

private void viewRecords(List<CSVBean> generated)
    {
        int page = 1;
        int recordsPerPage = 100;
        int offset = (page - 1) * recordsPerPage;
        System.out.println("offset:"+offset);
        System.out.println("recordsPerPage:"+recordsPerPage);

        for(int i= offset;i<recordsPerPage;i++)
        {
            CSVBean csvBean = generated.get(i);
            System.out.println(csvBean.getAttr1());
            System.out.println(csvBean.getAttr2());
            System.out.println(csvBean.getAttr3());
            System.out.println(csvBean.getAttr4());
            System.out.println(csvBean.getAttr5());
        }
    }

最佳答案

假设有一个变量totalRecords,您在其中存储记录的数量。

因此,计算总页数

int totalPages = (int) (totalRecords / recordsPerPage);
if (totalRecords % recordsPerPage > 0) {
        totalPages++; // increase totalPages if there's a division remainder
}

向客户端发送totalPages信息来表示类似的信息

page 1 of 199

其中 199totalPages

现在,计算第一条记录数:

final int firstRecordNumber = (pageNumber - 1) * recordsPerPage + 1;

检查请求的页码是否正确:

if (firstRecordNumber > totalRecords) {
    // incorrect page number requested, throw exception, process error, etc
}

因此,现在从 firstRecordNumber 开始迭代记录并将其打印到输出。添加一个新变量,例如

int printedRecords = 0;

并在循环中增加它。像这样:

String oneRecord = getRecord(firstRecordNumber);    
while ( (null != oneRecord) && (printedRecords < recordsPerPage) ) {
    printedRecords++;

    // print information to output here

    oneRecord = getNextRecord();
}

关于java - 通过分页显示 20,000 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799871/

相关文章:

java - 错误; java.lang.IllegalStateException : Cannot create a session after the response has been committed

java - 如何将值从一个jsp页面发送到另一个页面但重定向到其他页面?

java - 从html获取参数到java函数调用

java - Spring MVC 中 Controller 的生命周期

java - 读取特定行并更改该行 Java 中的字符串

java - 我们如何在 Lambda 表达式中实现它?

java - 循环内循环 - 显示ArrayList

java - 取消突出显示丰富的行 :ScrollableDataTable

Java WebSocketClient 没有收到大尺寸的消息

java - 从选定的 ListViewItem 文本填充 TextView