使用 JDBC 和唯一约束进行批量插入

Posted

技术标签:

【中文标题】使用 JDBC 和唯一约束进行批量插入【英文标题】:Batch inserts with JDBC and Unique constraint 【发布时间】:2015-06-25 18:52:16 【问题描述】:

我在 Java 中有一个工作方法,可以批量插入许多行。

我面临的问题是我的表有一个唯一约束,如果表中已有一些行,则该方法不会插入不属于数据库的行。相反,它会引发以下异常

java.sql.BatchUpdateException: Batch entry 0 INSERT INTO .... was aborted.  Call getNextException to see the cause.

我可以做些什么来使该方法插入尚未在表中的方法并且不会像现在这样中止吗?

【问题讨论】:

您能否将命令中的 SQL 从普通插入更改为带有 where 条件的插入,以检查具有给定字段值的记录是否不存在? 那行得通,我得做sql语句看看效果如何 不幸的是 postgresql 还不支持合并或 upsert @AlexanderKudrevatykh 我认为 9.5 版会 您似乎想要批量翻转操作。 ***.com/q/17267417/398670 【参考方案1】:

您可以在该表上插入触发器之前处理这些内容。

【讨论】:

我以前也这样做过,但是有数千行它会变慢。没有其他选择吗? 您根据哪个字段或字段组合来决定该行是否已经在数据库中?在批量插入之前,您可以通过 java 中的准备好的语句获取它们,然后进行比较(以及您需要的任何逻辑),并仅发送那些不会失败的行。 仅当您先LOCK 餐桌时。

以上是关于使用 JDBC 和唯一约束进行批量插入的主要内容,如果未能解决你的问题,请参考以下文章

从数据框批量插入到数据库,忽略 Pyspark 中的失败行

使用唯一约束批量更新表 a

ORA-00001: 违反唯一约束条件

mongodb 索引唯一性约束

oracle数据导入时,提示违反唯一约束性?

具有序列提供的 id 的主键列上的唯一约束违规