【问题标题】:Batch inserts with JDBC and Unique constraint使用 JDBC 和唯一约束进行批量插入
【发布时间】: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 版会
  • 您似乎想要批量翻转操作。 stackoverflow.com/q/17267417/398670

标签: java sql postgresql jdbc


【解决方案1】:

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

【讨论】:

  • 我以前也这样做过,但是有数千行它会变慢。没有其他选择吗?
  • 您根据哪个字段或字段组合来决定该行是否已经在数据库中?在批量插入之前,您可以通过 java 中的准备好的语句获取它们,然后进行比较(以及您需要的任何逻辑),并仅发送那些不会失败的行。
  • 仅当您先LOCK 餐桌时。
猜你喜欢
  • 2012-09-17
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多