java查询几万条数据_java一次性查询几十万,几百万数据解决办法
java一次性查询几十万,几百万数据解决办法
java查询一次性查询几十万,几百万数据解决办法
很早的时候写工具用的一个办法。
当时是用来把百万数据打包 成rar文件。
所以用了个笨办法。 希望高手指导一下,有什么好方法没有啊
1、先批量查出所有数据,例子中是一万条一批。
2、在查出数据之后把每次的数据按一定规则存入本地文件。
3、获取数据时,通过批次读取,获得大批量数据。此方法参见: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
System.out.println("getMonthDataList--"+datanum+" 开始查询第"+(r+1)+"批数据");
String sql = "SELECT * FROM (SELECT rownum rn, a.dpt_code, a.arr_code,a.dpt_date,a.airways,a.flight," +
"a.cabin,a.price 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') 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(i%1000==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) + "毫秒");
}
} 读取大量数据文件方法。
©著作权归作者所有:来自51CTO博客作者yjflinchong的原创作品,如需转载,请注明出处,否则将追究法律责任
java查询几万条数据_java一次性查询几十万,几百万数据解决办法相关推荐
- java查询几万条数据_java一次性查询几十万,几百万数据解决办法(转载)
0hB)H"aK ZJ%K Z0java查询一次性查询几十万,几百万数据解决办法51Testing软件测试网0L?pAzOk51Testing软件测试网2@ai.g\1p 很早的时候写工具用 ...
- 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化
原文:再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化 继上篇文章<绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来>发布后在博客园首页展示 ...
- 部分ABAQUS版本数据无法正常输出到Excel的一种解决办法
ABAQUS学习笔记-部分ABAQUS版本数据无法正常输出到Excel的一种解决办法 ABAQUS输出的数据主要分为场输出与历史输出两种方式(根据空间与时间域区分),用户可以根据需要在Step中设置不 ...
- java 百万数据查询_java一次性查询几十万,几百万数据解决办法
java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指导一下,有什么好方法没有啊 1.先批量查出所有 ...
- java sql 写入万条数据_如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快
目录 场景介绍 项目配置 Mybatis为什么慢? JdbcTemplate让我眼前一亮 原生JDBC就是快啊! 存储过程怎么样? 越简单越快 前言 一直有一种说法:批量插入大量数据到MySQL数据库 ...
- Java一次性查询几十万 几百万数据解决办法
在做大数据量同步的时候,需要注意的内存使用问题,程序稍微控制不足,可能就会导致内存溢出等问题...在网上找了一些资料,发现大家都使用的如下方式: 1.先批量查询出所有数据,例子中是一万条一次 2.在查 ...
- mysql查询1万条数据要1秒钟_SQL查询效率:100万数据查询只需要1秒钟
机器情况: p4: 2.4 内存: 1 G os: windows 2003 数据库: SQL Server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by ste ...
- mysql查询1万条数据要1秒钟_SQL查询效率:100w数据查询只需要1秒钟
机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by s ...
- 【面试题记录】在mysql中查询10万条数据找到第50000到51000条数据,你会怎么做?
数据库表中准备了10万条数据,今天我们来做一下测试. 数据表:ticket_order_log 主键索引:id 先看一下数据,一共是101176条数据,耗时117s. select * from ti ...
最新文章
- 服务端工程师入门与进阶 Java 版
- 修正后的SYSTEM_THREADS与SYSTEM_PROCESSES结构体
- 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )
- 重磅 | Dragonfly 晋升成为 CNCF 孵化项目
- Transformation XML(TCODE-STRANS)
- 9中继器添加一列序号自增_三个动态自动更新EXCEL序号的小技巧,解决重复编号困扰...
- 寻找想改变人工智能的“大人物”!2019百度奖学金正式启动
- Atlas元数据存储模型分析
- html table设置行高_字号与行高
- 线上redis一般安在linux_Redis企业级应用-Linux安装搭建一个完整的linxu线上服务(上)...
- Linux IO调度器相关算法介绍
- mysql常见报错及问题排查
- C++17 部分实用特性
- 【优化算法】混沌游戏优化 (CGO)【含Matlab源码 1010期】
- 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(22):方阵函数在微分方程组中的应用
- C3:Unity3D制作智能家居设计软件——绘制户型(二)
- ramdump crash工具
- Java 实习生(月薪 3k-5k 水平)应具备哪些知识、能力?给学弟学妹们支招
- 推荐!十个好用的百度网盘搜索引擎
- 精品微信小程序ssm电影院购票+后台管理系统|前后分离VUE
热门文章
- Postgres -- 报错: org.postgresql.util.PSQLException: 语法错误 在 “user“ 或附近
- NVIDIA RTX A4500强势发布,NVIDIA RTX专业图形工作站GPU为“Ampere架构全家桶”增加新成员
- 4 款非常好用的AI生成图片软件
- SQL常用语句-查询指定行的数据
- windows7下安装linux的发行版ubuntu操作系统整理
- java生产线消费者,基于Java 生产者消费者模式(详细分析)
- css profile填写攻略,手把手教你填写CSS Profile表格
- 【设计模式】行为型:几种设计模式小结
- <<视觉问答>>2021:Mind Your Outliers,Investigating the Negative Impact of Outliers on Active Learning VQA
- 不要再到处使用 === 了