進行數據庫操做,老是會遇到各類各樣的異常,如何獲得反饋,並給用戶友好的提示須要作一番功夫。java
好比說若是用戶輸入了一個已經存在的用戶名(主鍵)的話,下層會返回sql異常:sql
SQL 錯誤: ORA-00001: 違反惟一約束條件 (BK.PK_TUSER)數據庫
相似這樣。異常類爲SQLIntegrityConstraintViolationException,能夠經過api查看這個類,主要是違反完整性約束(foreign key, primary key or unique key)時會出現。SQLState的值爲23.api
咱們能夠經過在底層拋出異常,到UI層處理的方式來解決。ui
首先在dao層拋出異常:code
public void addUser(User user) throws SQLIntegrityConstraintViolationException,Exception { }
在biz層繼續上拋get
public void addUser(User user) throws SQLIntegrityConstraintViolationException,Exception { UserDao dao = new UserDao(); dao.addUser(user); }
在ui層獲取異常,進行提示it
public static void addUserTest(){ UserBiz biz = new UserBiz(); User user = new User(); user.setUname("jack2"); user.setPwd("123"); user.setRole(IRole.VIP); try { biz.addUser(user); System.out.println(user.getUname() + "添加成功"); } catch (SQLIntegrityConstraintViolationException e) { //這裏獲取異常,這是一個示範代碼,可是我以爲不須要判斷value爲23000,這個名字就已經肯定了這個值 if(e.getSQLState().equals("23000")){ System.out.println("用戶名已經存在,請從新輸入"); } } catch (Exception e) { e.printStackTrace(); } }
這樣就獲取到了主鍵衝突的異常,能夠進行咱們的相應處理了,比以前把全部的異常一古腦兒都打印出來要好一些。io