JDBC 批量插入异常处理以了解特定的失败记录

Posted

技术标签:

【中文标题】JDBC 批量插入异常处理以了解特定的失败记录【英文标题】:JDBC Batch insert exception handling to know the particular failed record 【发布时间】:2018-05-28 06:56:13 【问题描述】:

我想在java程序中读取一个包含oracle插入语句的txt文件并作为批处理执行,如果批处理中的任何记录失败,我如何知道特定的插入语句只失败了。

例如,如果我在文件中有 1000 条记录,而 659 条记录插入失败, 我如何知道 659 记录在执行批量更新中失败。是否有任何其他过程可以做到这一点,请告诉我。

【问题讨论】:

【参考方案1】:

有两种方法可以处理上述情况,要么签入 Java 代码,要么编写程序

    Java 代码:这将加载所有内容或回滚整个批次。

    updateResult =preparedStatement.executeBatch(); checkSuccessfulUpdates(updateResult);

    public static void checkSuccessfulUpdates(int[] updateCounts) 抛出异常 for (int i :updateCounts) if (i == Statement.EXECUTE_FAILED) throw new Exception("并非所有行都已更新。回滚整个批次");

    编写 SQL 过程

将自定义对象中的全部数据发送到procedure,逐个记录加载,在循环内处理异常,出错时将失败记录加载到临时表中。

【讨论】:

以上是关于JDBC 批量插入异常处理以了解特定的失败记录的主要内容,如果未能解决你的问题,请参考以下文章

mysql jdbc连接器批量更新异常更新计数不如预期

如果一条记录在 oracle 中插入失败,则避免 jdbc 批量插入失败

使用JDBC一次插入多条记录(以MySQL为例)

立即执行...捕获记录特定异常

使用JDBC连接将记录插入Apache Ignite Cluster时出现异常

Cassandra - “批量太大”异常