循环分批从数据库获取数据

7 篇文章 0 订阅
模拟根据查询出的总数循环分批从数据库获取数据
很多时候我们并不能在jvm存住一个多达一两万元素的List,如果单个元素过大不加以控制,有可能会造成内存溢出,所以需要分批查询数据
public static void main(String[] args) {
    //事先查出的总数
    int totalNum = 13031;
    //每次拿取数量
    int preNum = 1000;
    //循环过的数量
    int passNum = 0;
    do {
        System.out.println("select * from a limit " + passNum + "," + preNum);
        passNum += preNum;
    } while (passNum < totalNum);
}
打印结果,每次只拿取1000条数据,保证程序中不会出现太大的数组导致内存溢出
select * from a limit 0,1000;
select * from a limit 1000,1000;
select * from a limit 2000,1000;
select * from a limit 3000,1000;
select * from a limit 4000,1000;
select * from a limit 5000,1000;
select * from a limit 6000,1000;
select * from a limit 7000,1000;
select * from a limit 8000,1000;
select * from a limit 9000,1000;
select * from a limit 10000,1000;
select * from a limit 11000,1000;
select * from a limit 12000,1000;
select * from a limit 13000,1000;
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当从数据库读取大量数据时,如果出现 MemoryError 错误,这通常意味着内存不足以容纳所有的数据。解决这个问题的方法有以下几种: 1. 分批读取:将大量数据成多个较小的批次进行读取,而不是一次性读取全部数据。可以使用循环或迭代的方式,每次读取一部数据,并在处理完后释放内存,然后再读取下一批数据。这样可以减少内存的占用。 2. 使用生成器:使用生成器(generator)来逐行或逐批读取数据,而不是一次性获取全部数据。生成器可以逐个生成数据项,而不会将所有数据都加载到内存中。这样可以节省内存并避免 MemoryError 错误。 3. 优化查询语句:如果查询语句返回的结果集过大,可以优化查询语句,减少返回的数据量。例如,可以使用 LIMIT 和 OFFSET 子句进行查询,或者只选择需要的列而不是全部列。 4. 使用压缩算法:在读取大量数据时,可以考虑使用压缩算法来减少数据在内存中占用的空间。例如,可以使用 gzip 或 zlib 模块对数据进行压缩,然后在处理时进行解压缩。 5. 使用数据库布式处理:如果数据库支持布式处理,可以考虑将数据散存储在多个节点上,并使用布式计算框架(如 Apache Spark)来并行读取和处理数据。这样可以将负载散到多个节点上,减少单个节点的内存压力。 6. 增加系统内存:如果硬件条件允许,可以考虑增加系统的物理内存,以容纳更大数量的数据。 根据具体情况,可以选择其中一种或多种方法来解决 MemoryError 错误。在实际应用中,需要根据数据量、系统资源和性能要求等因素进行权衡和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值