常用的从 MySQL 分页取数据处理脚本

37 阅读1分钟

下面是一个简单的 Java 代码示例,模拟从 MySQL 分页取数据,并进行模拟业务处理,同时提供查询 API 获取处理进度、处理失败的 ID 和处理成功的 ID:

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DataProcessor {
    private static final int PAGE_SIZE = 100; // 每页数据量
    private static final String FAILED_IDS_FILE = "failed_ids.txt"; // 失败 ID 记录文件路径

    private final int totalPages;
    private int currentPage = 0;

    public DataProcessor(int totalRecords) {
        this.totalPages = (int) Math.ceil((double) totalRecords / PAGE_SIZE);
    }

    // 模拟从数据库查询数据
    private List<Paper> queryPapers(int pageNumber) {
        // 假设从数据库中查询数据并返回
        return new ArrayList<>();
    }

    // 模拟业务处理,返回处理失败的 ID
    private List<Integer> processPapers(List<Paper> papers) {
        List<Integer> failedIds = new ArrayList<>();
        // 模拟业务处理,假设处理失败的 ID 为偶数
        for (Paper paper : papers) {
            if (paper.getId() % 2 == 0) {
                failedIds.add(paper.getId());
            }
        }
        return failedIds;
    }

    // 提供查询处理进度的 API
    public double getProgress() {
        return (double) currentPage / totalPages;
    }

    // 模拟处理数据的主流程
    public void process() {
        try (FileWriter writer = new FileWriter(FAILED_IDS_FILE)) {
            for (int i = 1; i <= totalPages; i++) {
                List<Paper> papers = queryPapers(i);
                List<Integer> failedIds = processPapers(papers);
                // 将处理失败的 ID 记录到文件中
                for (Integer id : failedIds) {
                    writer.write(id + "\n");
                }
                System.out.println("Page " + i + " processed. Failed IDs: " + failedIds);
                currentPage++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 假设总记录数为 1000
        DataProcessor processor = new DataProcessor(1000);
        processor.process();

        // 获取处理进度
        System.out.println("Processing progress: " + processor.getProgress());
    }
}

class Paper {
    private int id;
    // 其他字段和对应的 getter 和 setter 方法省略
}

在上述代码中,DataProcessor 类封装了处理数据的逻辑,并提供了获取处理进度、处理失败的 ID 和处理成功的 ID 的 API。process 方法模拟处理数据的主流程,在其中调用 queryPapers 方法查询数据,并调用 processPapers 方法处理数据。