Java 使用JDBC和唯一约束的批插入

Java 使用JDBC和唯一约束的批插入,java,sql,postgresql,jdbc,Java,Sql,Postgresql,Jdbc,我在Java中有一个工作方法,可以批量插入许多行 我面临的问题是,我的表上有一个唯一的约束,如果表中已有一些行,那么该方法不会插入不属于数据库的行。相反,它抛出以下异常 java.sql.BatchUpdateException: Batch entry 0 INSERT INTO .... was aborted. Call getNextException to see the cause. 我能做些什么来让方法插入表中还没有的方法,而不是像现在这样中止吗?您可以在该表上插入触发器之前处

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

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

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


我能做些什么来让方法插入表中还没有的方法,而不是像现在这样中止吗?

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

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

我以前也这么做过,但由于排了几千行,速度变慢了。没有其他选择?根据哪个字段或字段组合来决定该行是否已在db中?在批插入之前,您可以通过java中准备好的语句获取这些数据,然后进行比较(以及您需要的任何逻辑),并仅发送不会失败的行。前提是您先锁定表。我以前也这样做过,但由于有数千行,速度会减慢。没有其他选择?根据哪个字段或字段组合来决定该行是否已在db中?在批插入之前,您可以通过java中准备好的语句获取这些数据,然后进行比较(以及您需要的任何逻辑),并且只发送不会失败的行。只有在
首先锁定表的情况下。您可以将命令中的SQL从普通insert更改为带有where条件的insert,以检查具有给定字段值的记录是否不存在吗,我必须使用sql语句来查看它的工作情况。不幸的是,postgresql不支持merge或upsertyet@AlexanderKudrevatykh我认为9.5版会让你看起来想要一个批量打乱操作。您能否将命令中的SQL从普通insert更改为带有where条件的insert,以检查具有给定字段值的记录是否不存在,我必须使用sql语句来查看它的工作情况。不幸的是,postgresql不支持merge或upsertyet@AlexanderKudrevatykh我认为9.5版会让你看起来想要一个批量打乱操作。