最近在項目中碰到了這麼一個需求,一個JavaWeb項目,數據庫用的是Oracle。業務上有一個對一張表的操做功能,當時設置了兩個字段聯合的惟一約束。因爲前斷沒有對重複字段的校驗,須要在插入時若是碰到惟一約束重複的時候在報文中拋出異常信息的描述,這是就須要獲取詳細的Oracle錯誤並添加錯誤描述信息。衆所周知,oracle的錯誤碼返回都是以ORA-xxxxx開頭的,因此獲取方式以下所示:數據庫
//獲取Oracle的錯誤碼. // @return 錯誤碼 如00001是主鍵衝突 public static String getOraCode(Exception e) { if (e == null) { return ""; } String tmp = e.getMessage(); int index = tmp.toUpperCase().indexOf("ORA-"); if (index != -1) { return tmp.substring(index + 4, index + 9); } return ""; }
public void addAccFlow(Map<String,Object> map) throws Exception { try { generalAccountingParanService.add(map); } catch (Exception e) { String flag = getOraCode(e); //主鍵衝突 if (flag.equals("00001")) { throw new BusinessException(MsgConstant_26001); } throw ex; } }