Java – 巨大的数据检索
发布时间:2020-12-15 02:24:21 所属栏目:Java 来源:网络整理
导读:我有一个请求,在其中一个报告中,我需要从数据库中获取大约1000万条记录并将它们传输到Excel. 该应用程序是客户端 – 服务器模型,其中服务器端逻辑用EJB和EJB编写.客户端是用Swing编写的. 现在我的问题是当我尝试从Resultset填充Java的对象时,如果结果集的大
我有一个请求,在其中一个报告中,我需要从数据库中获取大约1000万条记录并将它们传输到Excel.
该应用程序是客户端 – 服务器模型,其中服务器端逻辑用EJB和EJB编写.客户端是用Swing编写的. 现在我的问题是当我尝试从Resultset填充Java的对象时,如果结果集的大小更多(>> 100000)那么它会在Java端抛出Out of Memory Error. 有人能告诉我这个风景应该如何处理Java?我需要将所有记录从服务器传输到客户端,然后我需要根据从服务器端检索的数据构建Excel报告. 解决方法
我会使用LIMIT命令将结果集分解为更小的块(mySQL,不知道这是否在其他数据库服务器中).像这样的伪代码:
long recsToget = 50000; long got = recsToGet; long offset = 0; while ( got == recsToGet ) { got = getNextBatchFromDb( offset ); writeBatchToCsv(); offset += recsToGet; //increase your OFFSET each time } 我会在getNextBatchFromDb()函数中的SQL查询中使用LIMIT和OFFSET,如下所示: select * from yourtable LIMIT 50000 OFFSET 100000 OFFSET是开始读取的位置,LIMIT是要读取的数字. 通过这样做,您可以在较小的块中读取大数据集并每次更新CSV直到完成.您知道当getNextBatchFromDb()返回小于recsToGet的行数时,已读取所有记录. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |