用Java代码高效的插入从文件中读取的数据:报错
从文件中读取了大量的数据,怎么批量插入到数据库中?代码如下:
String tableName = "student";
Connection conn = JDBCUtil.getConnection();
String sql = "insert into " + tableName + "(Xh,Xm,Bj,Kc,Cj)"
+ "values(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
InputStream is = ReadFile.class.getResourceAsStream("大文件.txt");
BufferedReader br;
try {
br = new BufferedReader(new InputStreamReader(is, "GBK"));
String s = br.readLine();
while (s != null) {
String[] info = s.split(",");
ps.setString(0, info[0]);
System.out.println(info[0]+","+info[1]);
ps.setString(1, info[1]);
ps.setString(2, info[2]);
ps.setString(3, info[3]);
ps.setString(4, info[4]);
ps.addBatch();
s = br.readLine();
ps.executeBatch();
System.out.println();
}
1.ps.executeBatch();放到循环外面,2.另外如果内存够大,可以将文件存到内存中,Apache 和guava都有相应的api 比如:FileUtils.readLines(new File(path));不过不太推荐3.while循环是单线程的,用java8的foreach可以简单解决,追求高点,还是要写成多线程去解决,想办法吧,期待楼主测试后给予反馈,看看能提升多少######回复 @成熟的毛毛虫 : 就是把ps.executeBatch();放到循环外面啦,然后把count的值设置了一下,速度挺快的,1秒######回复 @深蓝浅爱 : 公布下呀######用自己的方式解决了######
ps.executeBatch();
这句话调用的太早了, 弄个计数器, addBatch N次以后再executeBatch一次.
另外, 最高效的方式, 应该用数据库的 LOAD DATA INFILE 命令.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。