2015-06-25 116 views
1

我有一個工作方法在Java中插入許多行作爲批處理。批處理插入與JDBC和唯一約束

我面臨的問題是我對我的表有一個唯一的約束,如果有一些已經在表中的行,該方法不會插入不屬於數據庫的行。相反,它拋出以下異常

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

有什麼我可以做,使該方法插入已不在桌上,而不是放棄像它現在這樣的人?

+0

您是否可以將命令中的SQL從普通插入更改爲帶有where條件的插入,該條件檢查具有給定字段值的記錄是否不存在? – RealSkeptic

+0

這可以工作,我必須使sql語句,看看它會工作如何 – Arya

+0

不幸postgresql不支持合併或upsert但 –

回答

0

你可以通過在該表上插入觸發器之前處理這些東西。

+0

我這樣做之前,但成千上萬的行減慢。有沒有其他的選擇? – Arya

+0

根據哪個字段或字段組合確定該行是否已經在db中? 在批量插入之前,您可以通過java中的預準備語句,然後比較(以及您需要的任何邏輯),並僅發送那些不會失敗的行。 –

+0

只有當您首先鎖定桌子。 –