程序跑出下面的異常:com.ibm.websphere.ce.cm.DuplicateKeyException: ORA-00001: 違反唯一約束條件 (EOMS3.SYS_C0024492),參考下面的文章了解到我的程序可能是序列的問題。(果然是序列產生的最小值設置的太小,將序列值設置大之后,問題解決)原文如下:
<wbr><wbr><wbr> 對于java.sql.SQLException: ORA-00001: 違反唯一約束條件,可能是該表的主鍵唯一性出錯,即:主鍵中已有某個鍵值,現在又要插入一個同樣的值,這樣就要報這個異常.<wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr> 在oracle中,主健不能自動生成,不過可以通過“序列”來實現,如果是這樣的話,問題很可能就出在“序列”上了;</wbr></wbr></wbr>ORACLE表主鍵ID突然從已經存在的ID值開始自動生成,導致違反主鍵唯一性約束;可以通過修改“序列”t_seqfactory (自定義序列名)的NEXTID得以解決(以用戶表T_XFHJ_LXLB為例):
<wbr><wbr><wbr> 先通過,select * from t_seqfactory where tblname='T_XFHJ_LXLB' 查找是否存在'T_XFHJ_LXLB' 這個表名,如果不存在,就要手動添加這條記錄;如果存在,它對應的nextid字段上加1,即:</wbr></wbr></wbr>
UPDATE t_seqfactory SET NEXTID=40 where tblname='T_XFHJ_LXLB'
解決方案:將序列能夠產生的最小值增大。
<wbr><wbr><wbr> 原來的創建語句。</wbr></wbr></wbr>
<wbr><wbr><wbr> create sequence a_fault_info_SEQ</wbr></wbr></wbr>
<wbr><wbr><wbr><span style="color:#ff0000">minvalue 1</span></wbr></wbr></wbr>
<wbr><wbr><wbr> maxvalue 999999999999999999999999<wbr>999</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr> start with 1</wbr></wbr></wbr>
<wbr><wbr><wbr> increment by 1</wbr></wbr></wbr>
<wbr><wbr><wbr> cache 20;</wbr></wbr></wbr>
<wbr><wbr><wbr><strong>修改步驟:</strong></wbr></wbr></wbr>
<wbr><wbr><wbr> 1、<wbr> DROP SEQUENCE a_fault_info_SEQ;</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr> 2、create sequence a_fault_info_SEQ</wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#ff0000">minvalue 1000</span></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> maxvalue 999999999999999999999999<wbr>999</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> start with 1</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> increment by 1</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr> cache 20;</wbr></wbr></wbr></wbr></wbr></wbr>