jdbc批量插入
2016-05-19 07:54
211 查看
分享牛,分享牛原创。有这样一个需求,文本文件中的数据批量的插入mysql,怎么用jdbc方式批量插入呢?
jdbc默认提供了批量插入的方法,可能用一次就忘记了,这里做笔记记录一下jdbc批量插入吧。
开启不支持事物,为什么要开启这个不支持事物的操作呢?这里主要是为了提高批量插入的效率,因为如果开启事物,那么mysql批量插入的时候,会产生一个log文件记录,每一条insert产生一个log记录,那这样其实跟单条sql的插入基本一样,所以关闭事务。这样性能提高可能是量级的提升。
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)
jdbc默认提供了批量插入的方法,可能用一次就忘记了,这里做笔记记录一下jdbc批量插入吧。
1.1.1. 代码
Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cxjc", "root", ""); conn.setAutoCommit(false); String sql = "insert into accout(id,NAME,money) values(?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); for(int i=1; i<3000; i++){ ps.setString(1, i+""); ps.setString(2, i+""); ps.setString(3, i+""); //添加 ps.addBatch(); } //执行 ps.executeBatch(); conn.commit(); }catch(Exception e){ } }
1.1.2. 注意的地方
conn.setAutoCommit(false);开启不支持事物,为什么要开启这个不支持事物的操作呢?这里主要是为了提高批量插入的效率,因为如果开启事物,那么mysql批量插入的时候,会产生一个log文件记录,每一条insert产生一个log记录,那这样其实跟单条sql的插入基本一样,所以关闭事务。这样性能提高可能是量级的提升。
1.1.3. 优化
当sql非常多的时候,我们可以查询到1000条sql的时候,就插入到数据库,这样保证每次插入的记录数就是批量插入一定的数量,而不是一次性非常多,代码的演变如下:public static void main(String[] args) { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cxjc", "root", ""); conn.setAutoCommit(false); String sql = "insert into accout(id,NAME,money) values(?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); for(int i=1; i<3000; i++){ ps.setString(1, i+""); ps.setString(2, i+""); ps.setString(3, i+""); ps.addBatch(); //添加 if (i%1000==0) { ps.executeBatch(); conn.commit(); } } //执行剩余的数据 ps.executeBatch(); conn.commit(); }catch(Exception e){ }
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)
相关文章推荐
- 计算机程序的思维逻辑 (14) - 类的组合
- sql语句复杂查询的思路
- 冬瓜哥的一项民科猜想可能将被证实
- 【冬瓜哥画PPT】最完整的存储系统接口/协议/连接方式总结
- windows10上安装 .NET Framework 3.5
- CSS Sprite
- 一看就懂的设计模式(二,工厂模式)
- POJ 1204 AC自动机入门
- 【UVa】[156]Ananagrams
- centos 下安装PHP框架 Phalcon
- TVB-Gone 红外编码方法
- 收货地址
- [LintCode] Mini Twitter 迷你推特
- OC知识点
- Swift与OC之间的选择
- Objective-C语法汇总
- 产品经理,如何建立自己独特的产品观?(转)
- Android高斯模糊技术,实现毛玻璃效果
- PHP 生成图片缩略图函数
- 数的划分(NOIP2001)