我,谢谢您的关注.

我想使用Java将大量数据,实际上是大量数据(600万行)导出到.csv文件.该应用程序是使用toplink(ojdbc14)的JPA摆动应用程序.

我尝试使用:

但是BufferedWriter

RandomAccessFile的

FileChannel

等等,但是尽管我将最大堆大小设置为800m(-Xmx800m),但是内存消耗仍然很高,导致Java堆内存不足异常.

我的源代码的最新版本:

...(more lines of code)

FileChannel channel = getRandomAccessFile(tempFile).getChannel();

Object[][] data = pag.getRawData(); //Database data in a multidimentional array

for (int j = 0; j < data.length; j++) {

write(data[j], channel); //write data[j] (an array) into the channel

freeStringLine(data[j]); //data[j] is an array, this method sets all positions =null

data[j] = null;//sets reference in null

}

channel.force(false); //force writing in file system (HD)

channel.close(); //Close the channel

pag = null;

...(more lines of code)

private void write(Object[] row, FileChannel channel) throws DatabaseException {

if (byteBuff == null) {

byteBuff = ByteBuffer.allocateDirect(1024 * 1024);

}

for (int j = 0; j < row.length; j++) {

if (j < row.length - 1) {

if (row[j] != null) {

byteBuff.put(row[j].toString().getBytes());

}

byteBuff.put(SPLITER_BYTES);

} else {

if (row[j] != null) {

byteBuff.put(row[j].toString().getBytes());

}

}

}

byteBuff.put("

".toString().getBytes());

byteBuff.flip();

try {

channel.write(byteBuff);

} catch (IOException ex) {

throw new DatabaseException("Imposible escribir en archivo temporal de exportación : " + ex.getMessage(), ex.getCause());

}

byteBuff.clear();

}

作为600万行,我不想在创建文件时将该数据存储在内存中.我制作了许多临时文件(每个文件有5000行),最后,使用两个FileChannel将所有这些临时文件附加到一个文件中.但是,缺少内存的异常是在加入之前启动的.

您现在是否是导出大量数据的另一种策略?

非常感谢您的答复.对不起,我的英文,我正在提高xD

Java将mysql输出csv_使用Java将大量数据从数据库导出到.csv时出...相关推荐

  1. java链接mysql输出查询_用java做网站,java连接数据库并查询输出到页面

    java web的后缀名是jsp,所以咱们要有一个jsp的开发环境,我这用的是jspStudy 自行百度.这软件是一个集成开发环境,安装启动后即可使用,集成了tomcat和mysql数据库 首先我们先 ...

  2. Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv

    I am trying to export a lot of large tables from a MS Access db with java using the jdbc:odbc bridge ...

  3. 超市管理系统java swing+mysql报告_基于java+swing+mysql的超市管理系统

    运行环境:java jdk 1.8 IDE环境:Eclipse,Myeclipse,IDEA都可以 硬件环境:windows 7/8/10 2G内存以上(推荐4G,4G以上更好) 可以实现: 销售管理 ...

  4. Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题

    MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...

  5. MySQL入门笔记(五):另存数据为文件(导出数据)

    在select查询数据之后,要把结果数据保存到文件里,则需要另存数据为文件的操作,即导出数据 mysql> select user,host into outfile 'out.csv' fie ...

  6. java 异常堆栈输出_打印Java异常堆栈信息

    背景 在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来).这样方便后续定位问题. 需要记录的运行时环境包含两部分内容:抛异常时 ...

  7. java 匹配mysql按钮_使用Java在mysql查询中设置匹配函数

    我有以下在java中查询(mysql)的摘录: queryGeral.append("FROM product p, fabricante_product fp, fabricante f, ...

  8. java创建mysql驱动,JDBC之Java连接mysql实现增删改查

    使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...

  9. java毫秒 mysql秒_MySQL和Java时间毫秒之间的转换问题的总结

    在做关于依时间查询用户认证的业务,因为在MySQL中,time字段使用的是bigint类型,所以存在其中都是毫秒数.当需要从数据库中取出 最近几天在做关于依时间查询用户认证的业务,因为在MySQL中, ...

最新文章

  1. 爬取王垠的博客并生成pdf
  2. 根据经纬度计算范围_遗传算法可视化项目(插曲):关于距离的计算
  3. linux sort -w32,WIN32汇编: 31.列表视图控件
  4. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----自定义攻击篇
  5. 2016 排行前20 的编程语言
  6. 11下滑半个屏幕_努比亚发布手表手机:柔性屏幕,体积感人
  7. springmvc与struts2的区别
  8. 运维(2班)梁瑞第五次作业
  9. wordpress标签或者固定地址中文404错误解决插件
  10. svd奇异值分解_Lecture 28 | 奇异值分解
  11. 第6次结对作业--郑锦伟古维城
  12. 关于汉王 唐人笔手写板 打开后间歇性手写程序闪退以及屏幕锁屏或者关闭后手写板自动usb拔出问题
  13. linux系统下字体目录,Linux CentOS 7 安装字体库 中文字体
  14. 【厚积薄发】如何优化WaitForGPU?
  15. 如何才能成为一名优秀的设计师?
  16. 单片机反相器_TTL反相器的基本电路
  17. [Go] String型常用操作
  18. 2009年网络游戏排行榜
  19. 股票自动委托下单html,股票怎么设置自动挂单?股票交易挂单规则
  20. K8S 故障处理经验积累(网络)

热门文章

  1. .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 )...
  2. Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架...
  3. .NET Core 2.2 新增部分功能使用尝鲜
  4. 【活动(广州)】MonkeyFest2018 微软最有价值专家讲座
  5. 《.NET Core 2.0 应用程序高级调试》7折优惠
  6. 使用 C# (.NET Core) 实现模板方法模式 (Template Method Pattern)
  7. 在ASP.NET Core中使用AOP来简化缓存操作
  8. asp.net core MVC 过滤器之ActionFilter过滤器(二)
  9. django08: 视图与路由(旧笔记)
  10. Linux的scan命令,linux的scan命令