13.7.3 Java 8增强的批量更新
JDBC还提供了一个批量更新的功能,使用批量更新时,多条SQL语句将被作为一批操作被同时收集,并同时提交。
提示
批量更新必须得到底层数据库的支持,可以通过调用DatabaseMetaData的supportsBatchUpdates()方法来查看底层数据库是否支持批量更新.
使用批量更新也需要先创建一个Statement对象,然后利用该对象的add Batcho方法将多条SQL语句同时收集起来,最后调用Java 8为Statement对象新增的executeLargeBatch()(或原有的executeBatch())方法同时执行这些SQL语句。只要批量操作中任何一条SQL语句影响的记录条数可能超过Integer.MAX_VALUE,就应该使用executeLargeBatch()方法,而不是executeBatch()方法。
如下代码片段示范了如何执行批量更新。
1 | Statement stmt=conn.createStatement(); |
执行executeLargeBatch()方法将返回一个long数组,因为使用Statement执行DDL、DML语句都将返回一个long值,而执行多条DDL、DML语句将会返回多个long值,多个long值就组成了这个long数组。
如果在批量更新的addBatch()方法中添加了select査询语句,程序将直接出现错误。
编程要点
为了让批量操作可以正确地处理错误,必须把批量执行的操作视为单个事务,如果批量更新在执行过程中失败,则让事务回滚到批量操作开始之前的状态。
为了达到这种效果,程序应该在开始批量操作之前先关闭自动提交,然后开始收集更新语句,当批量操作执行结束后,提交事务,并恢复之前的自动提交模式。如下代码片段所示:
1 | //1.保存当前的自动的提交模式 |
注意MySQL的最新驱动程序依然不支持executeLargeBatch()方法,对于数据库驱动不支持executeLargeBatch()的情形,则只能依然使用传统的executeBatch()方法
原文链接: 13.7.3 Java 8增强的批量更新