通过jsp向mysql批量导入数据_对大数据的批量导入MySQL数据库

自己的库里有索引在用insert导入数据时会变慢很多

使用事务+批量导入

可以配置使用spring+mybatis整合的方式关闭自动提交事务(地址),选择批量导入每一百条导入使用list存储值传入到mybatis中

http://x125858805.iteye.com/blog/2369243

list.add(bill); //自己选择插入对象if(list.size()==1000) {

Result num =billCheckService.batchInsert(list); //将会调用下面的配置文件countnum+=num.getData();for(int i = 0; i < num.getData();i++) {

countmoney+=list.get(i).getPayAmount();

}list.clear();

}

insert into t_pay_bill_file_detail (file_id,pay_order_no,third_trade_no)values

(

#{item.fileId},

#{item.payOrderNo},

#{item.thirdTradeNo}

)

或者使用原始的jdbc关闭事务进行批量提交

conn.setAutoCommit(false); //一句话就可以啦

ps.addBatch();if(list.size()==1000) {int[] num =ps.executeBatch();

conn.commit();

}

前两个自己试验的时候大概花的时间都一样,自己又试验了一个按文件处理的语句进行jdbc插入,是最快的方式了,可以在SQL后面制定插入固定字段的值,前提是文件的顺序必须是一样的,注意事项:

character set utf8 --------这里是utf8不是utf-8;

fields terminated by ','----文件中每个字段是按‘,’分割的,如.csv文件

lines terminated by '\\n'---每行代表一个记录;

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://192.168.2.18:3306/fi?characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false",

username,password);

reader= new BufferedReader(new InputStreamReader(file.getInputStream())); //因为自己是从前端传进来一个file(MultipartFile类型)

file1=File.createTempFile("gjy",".txt",new File("E:")); //E:后面不用写//来代表在盘符下,SQL会默认缺省的,不然添加后报错

String sql= "load data local infile "+'"'+ file1.getAbsolutePath()+'"'

+" into table t_pay_bill_file_detailcopy character set utf8 fields terminated by ','"+ "lines terminated by '\\n'"+ "(`file_id`,`trans_type`,`pay_channel_id`,`pay_order_no`,`third_trade_no`,`trans_date`,`pay_amount`) ";

ps=conn.prepareStatement(sql);

ps.execute();

file1.deleteOnExit(); //程序退出时删除临时文件

这个方式虽然快是快,但是对文件的要求太高,客户不可能对程序理解,只知道传进来文件,所以自己取到file对象都会对file进行按行读取并进行判断重写写入临时文件

这就又有个问题,读取写入需要花费太多时间,因为自己需要各种业务逻辑进行处理。目前正在努力解决中,如果大家有什么好的方法可以提出来一下!

ps:关注一下本人公众号,每周都有新更新哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值