开发者社区> 问答> 正文

用Java代码高效的插入从文件中读取的数据:报错

用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();
}

展开
收起
kun坤 2020-06-07 21:38:41 610 0
1 条回答
写回答
取消 提交回答
  • 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 命令.



    ######方法确实很高效,但是用自己的方法解决了,三克油
    2020-06-07 21:38:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载