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一次性查询几十万,几百万数据解决办法相关推荐

  1. java查询几万条数据_java一次性查询几十万,几百万数据解决办法(转载)

    0hB)H"aK ZJ%K Z0java查询一次性查询几十万,几百万数据解决办法51Testing软件测试网0L?pAzOk51Testing软件测试网2@ai.g\1p 很早的时候写工具用 ...

  2. 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化

    原文:再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化 继上篇文章<绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来>发布后在博客园首页展示 ...

  3. 部分ABAQUS版本数据无法正常输出到Excel的一种解决办法

    ABAQUS学习笔记-部分ABAQUS版本数据无法正常输出到Excel的一种解决办法 ABAQUS输出的数据主要分为场输出与历史输出两种方式(根据空间与时间域区分),用户可以根据需要在Step中设置不 ...

  4. java 百万数据查询_java一次性查询几十万,几百万数据解决办法

    java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指导一下,有什么好方法没有啊 1.先批量查出所有 ...

  5. java sql 写入万条数据_如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快

    目录 场景介绍 项目配置 Mybatis为什么慢? JdbcTemplate让我眼前一亮 原生JDBC就是快啊! 存储过程怎么样? 越简单越快 前言 一直有一种说法:批量插入大量数据到MySQL数据库 ...

  6. Java一次性查询几十万 几百万数据解决办法

    在做大数据量同步的时候,需要注意的内存使用问题,程序稍微控制不足,可能就会导致内存溢出等问题...在网上找了一些资料,发现大家都使用的如下方式: 1.先批量查询出所有数据,例子中是一万条一次 2.在查 ...

  7. mysql查询1万条数据要1秒钟_SQL查询效率:100万数据查询只需要1秒钟

    机器情况: p4: 2.4 内存: 1 G os: windows 2003 数据库: SQL Server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by ste ...

  8. mysql查询1万条数据要1秒钟_SQL查询效率:100w数据查询只需要1秒钟

    机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by s ...

  9. 【面试题记录】在mysql中查询10万条数据找到第50000到51000条数据,你会怎么做?

    数据库表中准备了10万条数据,今天我们来做一下测试. 数据表:ticket_order_log 主键索引:id 先看一下数据,一共是101176条数据,耗时117s. select * from ti ...

最新文章

  1. 服务端工程师入门与进阶 Java 版
  2. 修正后的SYSTEM_THREADS与SYSTEM_PROCESSES结构体
  3. 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )
  4. 重磅 | Dragonfly 晋升成为 CNCF 孵化项目
  5. Transformation XML(TCODE-STRANS)
  6. 9中继器添加一列序号自增_三个动态自动更新EXCEL序号的小技巧,解决重复编号困扰...
  7. 寻找想改变人工智能的“大人物”!2019百度奖学金正式启动
  8. Atlas元数据存储模型分析
  9. html table设置行高_字号与行高
  10. 线上redis一般安在linux_Redis企业级应用-Linux安装搭建一个完整的linxu线上服务(上)...
  11. Linux IO调度器相关算法介绍
  12. mysql常见报错及问题排查
  13. C++17 部分实用特性
  14. 【优化算法】混沌游戏优化 (CGO)【含Matlab源码 1010期】
  15. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(22):方阵函数在微分方程组中的应用
  16. C3:Unity3D制作智能家居设计软件——绘制户型(二)
  17. ramdump crash工具
  18. Java 实习生(月薪 3k-5k 水平)应具备哪些知识、能力?给学弟学妹们支招
  19. 推荐!十个好用的百度网盘搜索引擎
  20. 精品微信小程序ssm电影院购票+后台管理系统|前后分离VUE

热门文章

  1. Postgres -- 报错: org.postgresql.util.PSQLException: 语法错误 在 “user“ 或附近
  2. NVIDIA RTX A4500强势发布,NVIDIA RTX专业图形工作站GPU为“Ampere架构全家桶”增加新成员
  3. 4 款非常好用的AI生成图片软件
  4. SQL常用语句-查询指定行的数据
  5. windows7下安装linux的发行版ubuntu操作系统整理
  6. java生产线消费者,基于Java 生产者消费者模式(详细分析)
  7. css profile填写攻略,手把手教你填写CSS Profile表格
  8. 【设计模式】行为型:几种设计模式小结
  9. <<视觉问答>>2021:Mind Your Outliers,Investigating the Negative Impact of Outliers on Active Learning VQA
  10. 不要再到处使用 === 了