Java JDBC:使用executeBatch或executeUpdate检查每个更新语句是否成功是否更好?
我有一个MySQL数据库,需要在其中进行1k左右的更新,我正在考虑使用Java JDBC:使用executeBatch或executeUpdate检查每个更新语句是否成功是否更好?,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个MySQL数据库,需要在其中进行1k左右的更新,我正在考虑使用executeBatch还是executeUpdate更合适。preparedstatement将构建在1k或更多ID的ArrayList上(这些ID是要更新的表的PK)。对于表的每次更新,我需要检查它是否已更新(可能id不在表中)。如果该id不存在,我需要将该id添加到一个单独的ArrayList中,该ArrayList将用于批量插入 鉴于上述情况,是否更适合: 各种独立的executeUpdate(),然后存储未更新的id
executeBatch
还是executeUpdate
更合适。preparedstatement将构建在1k或更多ID的ArrayList上(这些ID是要更新的表的PK)。对于表的每次更新,我需要检查它是否已更新(可能id不在表中)。如果该id不存在,我需要将该id添加到一个单独的ArrayList中,该ArrayList将用于批量插入
鉴于上述情况,是否更适合:
executeUpdate()
,然后存储未更新的id,或者executeBatch()
,它将为每个单独的语句/id返回一个0或1的数组在第二种情况下,开销将是一个额外的数组来保存所有0或1返回值。在一个情况下,开销是由于单独执行每个更新。 我会使用批处理,因为网络延迟是必须考虑的,除非您不知何故在同一个方框上运行它。
明确ExcUpTeBuffe(),并确保向JDBC连接字符串中添加“ReWrdEdButCheDealsSt= true”。 吞吐量的增长很难夸大。假设您有适当的索引和使用它们的WHERE子句,那么1K更新可能只需要一次更新
如果没有连接字符串上的额外设置,批量更新的时间将与单独进行每个更新的时间大致相同。我想说的是,在受控延迟下尝试这两种方法,然后选择。但是似乎批处理会失败如果我们使用id ArrayList迭代地构建每个语句,executeBatch()的返回值有没有任何原因会出现顺序错误(即它们与id的ArrayList不匹配)?不,它们应该按照您将它们添加到批处理中的顺序