Java一次性查询几十万或几百万数据的解决办法
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章将为大家详细讲解有关Java一次性查询几十万或几百万数据的解决办法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java查询一次性查询几十万,
千家信息网最后更新 2025年11月11日Java一次性查询几十万或几百万数据的解决办法
这篇文章将为大家详细讲解有关Java一次性查询几十万或几百万数据的解决办法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Java查询一次性查询几十万,几百万数据解决办法。
很早的时候写工具用的一个办法,当时是用来把百万数据打包成rar文件。
所以用了个笨办法。 希望高手指导一下,有什么好方法没有啊。
先批量查出所有数据,例子中是一万条一批。
在查出数据之后把每次的数据按一定规则存入本地文件。
获取数据时,通过批次读取,获得大批量数据。此方法参见:http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/
以下是查询数据库。按批次查询
public static void getMonthDataList() { ResultSet rs = null; Statement stat = null; Connection conn = null; List list = new ArrayList(); try { conn = createConnection(); if(conn!=null){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat timesdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowDate = sdf.format(new Date()); Config.lasttimetext = timesdf.format(new Date()); String lastDate = sdf.format(CreateData.addDaysForDate(new Date(), 30)); stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); int lastrow = 0; int datanum = 0; String countsql = "SELECT count(a.id) FROM trip_special_flight a" + " where a.dpt_date >= to_date('"+nowDate+"','yyyy-mm-dd') " + "and a.dpt_date <= to_date('"+lastDate+"','yyyy-mm-dd') and rownum>"+lastrow+" order by a.get_time desc"; rs = stat.executeQuery(countsql); while (rs.next()) { datanum = rs.getInt(1); } int onerun = 10000; int runnum = datanum%onerun==0?(datanum/onerun):(datanum/onerun)+1; for(int r =0;r= to_date('"+nowDate+"','yyyy-mm-dd') " + "and a.dpt_date <= to_date('"+lastDate+"','yyyy-mm-dd') order by rownum asc) WHERE rn > "+lastrow; stat.setMaxRows(onerun); stat.setFetchSize(1000); rs = stat.executeQuery(sql); String text = ""; int i = 1; while (rs.next()) { text += rs.getString(2)+"|"+rs.getString(3)+"|"+rs.getDate(4)+"|"+rs.getString(5)+"|"+rs.getString(6)+"|"+rs.getString(7)+"|"+rs.getString(8)+"||"; if(i00==0){ FileUtil.appendToFile(Config.tempdatafile, text); text = ""; } i++; } if(text.length()>10){ FileUtil.appendToFile(Config.tempdatafile, text); } lastrow+=onerun; } } } catch (Exception e) { e.printStackTrace(); } finally { closeAll(rs, stat, conn); } } -----java一次性查询几十万,几百万数据解决办法
存入临时文件之后,再用读取大量数据文件方法。
设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址。
来源博客 http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/
package com.yjf.util; import java.io.File; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class Test { public static void main(String[] args) throws Exception { final int BUFFER_SIZE = 0x300000; // 缓冲区为3M File f = new File(Config.tempdatafile); // 来源博客http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/ int len = 0; Long start = System.currentTimeMillis(); for (int z = 8; z >0; z--) { MappedByteBuffer inputBuffer = new RandomAccessFile(f, "r") .getChannel().map(FileChannel.MapMode.READ_ONLY, f.length() * (z-1) / 8, f.length() * 1 / 8); byte[] dst = new byte[BUFFER_SIZE];// 每次读出3M的内容 for (int offset = 0; offset < inputBuffer.capacity(); offset += BUFFER_SIZE) { if (inputBuffer.capacity() - offset >= BUFFER_SIZE) { for (int i = 0; i < BUFFER_SIZE; i++) dst[i] = inputBuffer.get(offset + i); } else { for (int i = 0; i < inputBuffer.capacity() - offset; i++) dst[i] = inputBuffer.get(offset + i); } int length = (inputBuffer.capacity() % BUFFER_SIZE == 0) ? BUFFER_SIZE : inputBuffer.capacity() % BUFFER_SIZE; len += new String(dst, 0, length).length(); System.out.println(new String(dst, 0, length).length()+"-"+(z-1)+"-"+(8-z+1)); } } System.out.println(len); long end = System.currentTimeMillis(); System.out.println("读取文件文件花费:" + (end - start) + "毫秒"); } }读取大量数据文件方法。
关于Java一次性查询几十万或几百万数据的解决办法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
文件
查询
办法
一次性
内容
方法
博客
批次
文章
更多
来源
知识
篇文章
不错
万条
例子
地址
大小
大批量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全作文名怎么起
增补数据存入数据库
用户为什么要参与软件开发
无锡电商软件开发代理品牌
普法进行时网络安全
网络技术就业规划和认识
数据库介绍 课程
南开区网络安全会议
建设银行服务器升级的图片
软件开发怎么成本做
戴尔t430服务器怎么样
网络技术入门学习教程视频
软件开发前后端人员配比
潍坊格尔电子软件开发
天猫精灵显示服务器开小差是什么意思
xp服务器管理在哪里
怎么用国外服务器
软件开发和uiue哪个爽
银行系统网络安全工程师工资
软件开发项目管理技术
莱州菁胜网络技术有限公司
微信小程序查询数据库限制
网页可以直接调用数据库吗
京东网络安全工作
数据库面试索引问题
小本服务器
阿里云服务器租赁如何列支
vb遍历数据库的表
1.16.5的服务器
中国名家数据库是个什么机构