JDBC:使用executeBatch或executeUpdate来检查每个UPDATE语句是否成功是否更好?

时间:2017-03-17 22:27:24

标签: java mysql jdbc

我有一个MySQL数据库,我需要进行1k左右的更新,我正在考虑使用executeBatchexecuteUpdate是否更合适。 preparedstatement将建立在1k或更多id的ArrayList上(这是要更新的表的PK)。对于表的每次更新,我需要检查它是否已更新(可能是id不在表中)。在id不存在的情况下,我需要将该id添加到单独的ArrayList中,该ArrayList将用于批量插入。

鉴于上述情况,这样做更合适:

  1. 各种单独的executeUpdate()然后存储ID(如果未更新)或

  2. 只需创建一个批处理并使用executeBatch(),它将为每个单独的语句/ id返回0或1的数组。

  3. 在第二种情况下,开销将是一个额外的数组,用于保存所有0或1的返回值。在第一种情况下,开销将由于分别执行每个UPDATE。

2 个答案:

答案 0 :(得分:0)

我会批处理,因为除非你以某种方式在同一个盒子上运行它,否则需要考虑网络延迟。

答案 1 :(得分:0)

绝对是executeBatch(),并确保在jdbc连接字符串中添加“rewriteBatchedStatements = true”。

吞吐量的增加很难夸大。假设您有适当的索引和使用它们的WHERE子句,您的1K更新可能只需要比单个更新更长的时间。

如果没有连接字符串的额外设置,批量更新的时间与单独进行每次更新的时间大致相同。