java导入大批量数据_JAVA批量导入大文本数据(1G+)

这个不是造轮子,只是整理轮子,我在搜索引擎里,遇到的思路都是第一种思路(至少按照标题那个关键词搜索是这样的)所以我想发出来。一是如果遇到大神帮忙发现了方案一的问题与弊病,那就更好啦。

二是让大家不会像我一样,只有一个思路。

这里感谢我的韩漂亮同学,提供给我第二种思路,还替我研究半天问题。情景:最近工作中,需要处理1G+的文本文件简单处理后导入到数据库。

通用部分

方案都采用IO流中的Buffered系列,读取文件时候,采用了BufferedReader的输入流缓存。(搬来的,网上借鉴的)// 文件路径

File file = new File("F:\demo\demo.txt");

// 输入流

BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file))

// 30M的缓存

BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),30*1024*1024);

一定记得flash()或者close(),否则会出现意想不到的小问题,我没有关闭输出流,就出现文件少写的现象。

方案一(排除)

用纯正的JDBC语句,选用带缓存性能比较好的prepareStatement,但是从文本中插入数据库到1W3行左右就出现了问题:

java.net.SocketException: No buffer space available (maximum connections reached?):与Communications link failure的错误

我上网搜索良久,网上给的建议是增加数据库连接数和超时时间,我采用了并不能彻底解决问题(不会在1W行死掉了,但是也没多写多少文件)如果有解决办法,请慷慨相授,我会代替广大网友谢谢您!

方案二(目前采用)并且猜测Navicat的'导入向导'也是利用此方法

利用Mysql的load data infile方法:load data infile '文件全路径' replace into table 表名 character set utf8 fields terminated by '分割串' enclosed by '"' lines terminated by '\r\n' (字段列);

说实话,网上也有不少介绍Load data infile的。如果您能看懂这个,那这个绝对比网上找的长篇大论上手快。反正那些我看的是脑壳疼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值