mysql addbatch_超简单使用批处理(batch)操作数据库

超简单使用批处理(batch)操作数据库

批处理(batch)是什么

批处理的执行就好比快递员的工作:

未使用批处理的时候,快递员一次从分发点将一件快递发给客户;

使用批处理,则是快递员将所有要派送的快递都用车带到发放处派给客户。

批处理(batch)操作数据库

批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。

批处理操作数据库的过程主要是分两步:

1.将要执行的SQL语句保存

2.执行保存的SQL语句

如何实现批处理

Statement和PreparedStatement都支持批处理操作,这里我们只说明PreparedStatement的批处理方式:

方法:

void addBatch()

将要执行的SQL先保存起来,先不执行

这个方法需要在在设置完所有的占位符之后调用

int[] executeBatch()

这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行

mysql默认批处理是关闭的,所以我们还需要去打开mysql的批处理:

我们需要在mysql的url地址中加入一下参数:

rewriteBatchedStatements=true

例如:URL = "jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true";

演示实例:

1.创建一张新的数据表

CREATE TABLEtest (

idINT PRIMARY KEYAUTO_INCREMENT,

unameVARCHAR(50)

)

2、测试源码

1 //向test表中插入10000条数据

2 @Test//测试批处理

3 public voidtestBatch(){4 //向test表中插入10000条数据

5 Connection connection = null;6 PreparedStatement ps = null;7 try{8 /*

9 *获取数据库连接 数据库链接操作在此不进行赘述10 *原生数据库操作可参考:http://www.cnblogs.com/Mr-Dawei/p/7455324.html

11                 */

12 connection=XXXX;13 //sql语句编写

14 String sql = "INSERT INTO test(uname) VALUES(?)";15 //获取PrepareStatement

16 ps =connection.prepareStatement(sql);17 //创建一个for循环,来设置占位符参数数

18 for(int i = 0; i < 10000 ;i++){19 ps.setString(1,"test"+i);20 //添加到批处理方法中,调用无参的,有参的是Statement来调用的!

21 ps.addBatch();22 }23 //获取一个时间戳 可以测试执行效率

24 long start =System.currentTimeMillis();25 //统一执行执行批处理

26 ps.executeBatch();27 //获取一个时间戳

28 long end =System.currentTimeMillis();29 System.out.println("共花费了:"+(end-start));30 } catch(SQLException e) {31 e.printStackTrace();32 } finally{33 //逆序关闭资源

34 }35 }

通过操作结果我们可以清楚地看出其中批处理执行的效率提升多么明显

本人对批处理的了解浅显,若过路的诸位发现任何不对之处,还请多多之处。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java向MySQL批量存储数据可以使用批处理batch)的方式进行,这样可以大大提高插入数据的效率。下面是一个简单的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BatchInsertDemo { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false);//关闭自动提交事务 PreparedStatement pstmt = conn.prepareStatement("insert into user(name, age) values (?, ?)"); for (int i = 1; i <= 10000; i++) { pstmt.setString(1, "user" + i); pstmt.setInt(2, i % 100); pstmt.addBatch();//添加到批处理中 } pstmt.executeBatch();//批量执行 conn.commit();//提交事务 pstmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们创建了一个名为`BatchInsertDemo`的类,其中定义了一个`main()`方法。在`main()`方法中,我们首先定义了连接MySQL的URL、用户名和密码,然后使用`Class.forName()`方法加载了MySQL的驱动程序。接下来,我们通过`DriverManager.getConnection()`方法获得了与MySQL数据库的连接,并将自动提交事务关闭。 然后,我们使用`PreparedStatement`对象执行了一条插入语句,并使用`addBatch()`方法将其添加到批处理中。在循环结束后,我们使用`executeBatch()`方法批量执行所有的插入语句,并将事务提交。最后,我们关闭了`PreparedStatement`对象和数据库连接。 需要注意的是,批量插入数据时,每次插入的数据量不宜过大,否则可能会导致内存溢出或性能下降。一般来说,每批次插入的数据量在几千到一万条之间比较合适。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值