2023年11月26日发(作者:)

第⼗四章批量更新(BatchUpdates)

批量更新⼯具允许将多个SQL语句⼀次提交到数据源进⾏处理。 提交多个SQL语句,⽽不是单独提交可以⼤⼤提⾼性能。

Statement,PreparedStatement和CallableStatement对象可⽤于提交批量更新

14.1 批量更新说明

14.1.1 Statements

批量更新⼯具允许Statement对象将⼀组异构SQL语句作为单个单元或批处理⼀起提交给底层数据源

由于JDBC 2.0 API,Statement对象能够跟踪可以⼀起提交执⾏的命令列表(或批处理)。 创建Statement对象时,其关联批次为空。 应⽤程

只有DDL和DML命令才能返回简单的更新计数。 如果批处理中的任何命令⽆法正常执⾏或命令尝试返回结果集,那么executeBatch将抛出

BatchUpdateException。 当抛出BatchUpdateException时,应⽤程序可以调⽤ateCounts⽅法来获取

描述批处理执⾏结果的更新计数的整数数组

笔记:关于eratedKeys是否会在调⽤executeBatch或executeLargeBatch⽅法后返回⽣成的值是实现定义的

14.1.3 执⾏期间处理故障

执⾏命令失败后,JDBC驱动程序可能会或可能不会继续处理批处理剩余的命令。 但是,JDBC驱动程序必须始终提供与特定数据源相同的⾏为。

例如,驱动程序在⼀个批次发⽣故障后⽆法继续处理,⽽不能继续处理另⼀个批次

如果驱动程序在第⼀次失败后停⽌处理,则由ateCounts⽅法返回的数组将始终包含⽐批处理中的语句少的条

⽬。 由于语句按照添加到批处理的顺序执⾏,如果数组包含N个元素,这意味着在调⽤executeBatch时,批处理中的前N个元素被成功处理。

⽤“成功”指⽰符SUCCESS_NO_INFO

在PreparedStatement对象的情况下,错误处理与Statement对象的错误处理相同。 ⼀旦发⽣错误,某些驱动程序可能会停⽌处理,⽽其他驱

动程序可能会继续处理批次的其余部分

与Statement对象⼀样,ateCounts返回的数组中的元素数指⽰驱动程序是否在故障后继续处理。 相同的三

个数组元素值是可能的:0或更⾼,S_NO_INFO或E_FAILED。 数组中条⽬的顺序与将命令添加到批

次的顺序相同。

如果您的数据库⽀持返回可能超过_VALUE的更新计数,请使⽤executeLargeBatch和

geUpdateCounts

14.1.5 CallableStatement Objectement Objects