- 13.7.3 Java 8增强的批量更新
- 编程要点
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()
方法。
如下代码片段示范了如何执行批量更新。
| |
执行
executeLargeBatch()
方法将返回一个
long
数组,因为使用
Statement
执行
DDL
、
DML
语句都将返回一个
long
值,而执行多条
DDL
、
DML
语句将会返回多个
long
值,多个
long
值就组成了这个
long
数组。
如果在批量更新的
addBatch()
方法中添加了
select
査询语句,程序将直接出现错误。
编程要点
为了让批量操作可以正确地处理错误,必须把批量执行的操作视为单个事务,如果批量更新在执行过程中失败,则让事务回滚到批量操作开始之前的状态。
为了达到这种效果,程序应该在开始批量操作之前先关闭自动提交,然后开始收集更新语句,当批量操作执行结束后,提交事务,并恢复之前的自动提交模式。如下代码片段所示:
| |
注意
MySQL
的最新驱动程序依然不支持
executeLargeBatch()
方法,对于数据库驱动不支持
executeLargeBatch()
的情形,则只能依然使用传统的
executeBatch()
方法
原文链接: 13.7.3 Java 8增强的批量更新