java - 如果一条记录插入失败,如何让Preparedstatement.executeBatch() 为好记录工作

标签 java oracle plsql prepared-statement bind-variables

在我的java代码中,我有一个Prepared语句ps_temp。

PreparedStatement ps_temp;

// loop

ps_temp.setString(1,'abc');
....
....
ps_temp.addBatch();

// end loop

ps_temp.executeBatch();

现在批处理中的一条记录创建了唯一索引约束,最终导致整个 ps_temp.executeBatch() 失败。连批处理中的好记录都没有插入到表中。

那么,如果我的批处理有一些好的记录和一些坏的记录(这可能会导致完整性约束),那么是否有可能至少将好的记录插入到表中?

提前致谢!! 诺曼

最佳答案

一批记录中包含少量坏记录的情况很常见。 如果您尝试一次性插入所有记录,而其中一条记录失败,则整批插入都将被拒绝。这是预料之中的,也是“事务处理”的核心目的。

通常对于批量插入,您可以采取两种方法:

1)在每次记录插入后提交 --> 非常性能密集的过程。

2)将总记录分成更小的“ block ”并插入数据库。这样只有包含坏记录的 block 会失败,其他 block 将被插入到数据库中。

或者,如果您不想自己处理这些事情,可以选择框架。 Spring batch

在这种情况下可能是您的选择之一

关于java - 如果一条记录插入失败,如何让Preparedstatement.executeBatch() 为好记录工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23623187/

相关文章:

oracle - 启动Grails应用程序时无法创建池的初始连接

sql - Oracle SQL 隐藏重复值

.net - 在 Oracle Merge 语句的 Using 子句中指定参数

oracle - 从 Oracle Cursor 批量收集列的子集

plsql - 在pl/sql中映射数据结构以存储键值对?

java - 使用 JSON 文件初始化静态类

java - 如何从我的 ShrinkWrap 存档中删除我的测试类

语言环境的 Java 日期格式

java - 单击所有div层insight div

c# - PL/SQL 问题返回序列标量值