Java一次性查询几十万或几百万数据的解决办法
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章将为大家详细讲解有关Java一次性查询几十万或几百万数据的解决办法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java查询一次性查询几十万,
千家信息网最后更新 2024年09月22日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; Listlist = 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安全错误
数据库的锁怎样保障安全
徐州软件开发一般多少钱
校园网络安全教育微信公众号
12123数据库占用
安卓开发使用的数据库
无线传感网络技术与应用总结
查看服务器的域名
在关系数据库中表之间的关系
上海翱行网络技术公司
四川省网络安全公司
弹性云服务器生命周期管理
ip访问服务器
华为服务器还能享受免费贴膜吗
用友t6的数据库在哪里
mvc数据库的增删改查
江苏大容量服务器供应商家云空间
网络安全年薪500万
java编程服务器设计
命令行重启数据库
iq数据库客户端
李楚全国网络安全技能大赛
乐高无限有什么新的服务器
谷粒商城1核2G的服务器够吗
汕尾数据链软件开发价格
大话西游天价流萤服务器那里
肿瘤可视化生信分析数据库
软件开发女生毕业后该怎么发展
南昌网络安全培训机构线上学习
网络技术机考考试
我的世界1.6.2服务器
2021年发生的网络安全事件