【问题标题】:How to fetch the records failed during JDBC Batch Processing如何在 JDBC 批处理期间获取失败的记录
【发布时间】:2019-08-18 21:42:21
【问题描述】:

我正在通过 JDBC 批处理执行这组 SQL 语句。 批处理过程中如何获取记录失败。

我能够获得记录成功和失败的计数。但无法获取失败的记录。

Statement statement = null;
try {
    statement = connection.createStatement();
    for (String insertQuery : insertQuerys) {
            statement.addBatch(insertQuery);
    }
    statement.executeBatch();
} catch (Exception e) {
    logger.info("Error : " + e);
} finally {
    try {
        statement.close();
    } catch (SQLException e1) {
        logger.info("Error : " + e1);
    }
}

我预计在 JDBC 批处理期间失败的记录。

【问题讨论】:

  • the failed record 是什么意思?当 sql 语句/查询失败时,它只返回一个错误,没有records。您只能执行失败的 sql 语句/查询本身。

标签: java mysql sql oracle jdbc


【解决方案1】:

您可以捕获BatchUpdateException,它具有方法int[] getUpdateCounts(),该方法返回一个数组,该数组包含每个批处理语句影响的行数,按添加到批处理的顺序 >.

但重要的是,如果您的单个批处理语句更新了多行,您无法准确判断哪些行受到语句的影响,以及它们是否存在于表中(在插入或合并语句的情况下) .

【讨论】:

  • 请注意,驱动程序可以在第一次失败时停止,也可以继续执行。根据这种失败处理,更新计数要么包含成功执行语句的更新计数,直到失败语句,要么包含批处理中所有语句的更新计数,对于失败的语句,值为Statement.EXECUTE_FAILED。并且根据事务模式和驱动程序行为(自动提交、事务中止等),任何失败都可能恢复一切,包括成功执行的语句)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
相关资源
最近更新 更多