进行数据库操做,老是会遇到各类各样的异常,如何获得反馈,并给用户友好的提示须要作一番功夫。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