通过异常来提示发生主键冲突
2017-02-10 00:00
190 查看
进行数据库操作,总是会遇到各种各样的异常,如何得到反馈,并给用户友好的提示需要做一番功夫。
比如说如果用户输入了一个已经存在的用户名(主键)的话,下层会返回sql异常:
SQL 错误: ORA-00001: 违反唯一约束条件 (BK.PK_TUSER)
类似这样。异常类为SQLIntegrityConstraintViolationException,可以通过api查看这个类,主要是违反完整性约束(foreign key, primary key or unique key)时会出现。SQLState的值为23.
我们可以通过在底层抛出异常,到UI层处理的方式来解决。
首先在dao层抛出异常:
在biz层继续上抛
在ui层获取异常,进行提示
这样就获取到了主键冲突的异常,可以进行我们的相应处理了,比之前把所有的异常一股脑儿都打印出来要好一些。
比如说如果用户输入了一个已经存在的用户名(主键)的话,下层会返回sql异常:
SQL 错误: ORA-00001: 违反唯一约束条件 (BK.PK_TUSER)
类似这样。异常类为SQLIntegrityConstraintViolationException,可以通过api查看这个类,主要是违反完整性约束(foreign key, primary key or unique key)时会出现。SQLState的值为23.
我们可以通过在底层抛出异常,到UI层处理的方式来解决。
首先在dao层抛出异常:
public void addUser(User user) throws SQLIntegrityConstraintViolationException,Exception { }
在biz层继续上抛
public void addUser(User user) throws SQLIntegrityConstraintViolationException,Exception { UserDao dao = new UserDao(); dao.addUser(user); }
在ui层获取异常,进行提示
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(); } }
这样就获取到了主键冲突的异常,可以进行我们的相应处理了,比之前把所有的异常一股脑儿都打印出来要好一些。
相关文章推荐
- MDaemon 10.1.2 通过Webclient发邮件时,提示“发邮件时发生错误"
- 奇怪了。单步调试抛主键冲突异常。直接运行是正常的
- w7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
- 0xC0000005:读取某位置发生访问冲突;未处理的异常:用户断点
- win7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
- NET制作安装程序的错误提示:在初始化安装时发生异常 System.IO.FileNotFoundException
- oracle-win7安装oracle 10g时发生”程序异常终止。发生内部错误”的提示
- 10_2_4.exe 中的 0x00b0d00a 处有未经处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
- 【vs调试】C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- Windows7旗舰版下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法
- oracle 10g 在win7下安装,选择高级选项,提示程序异常终止,发生未知错误
- win7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
- 当发生异常时,怎样能不让‘delphi的异常提示框出现’而出现自己的‘异常提示框’?
- 0x657ac2b2 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突
- 由ShowWindow函数产生的“XX处未处理的异常:0xC0000005:读取位置0x00000020时发生访问冲突”
- Invoke、InvokeMember提示“调用的目标发生了异常”
- codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
- oracle 10g 在win7下安装,提示程序异常终止,发生未知错误
- XENDESKTOP部署桌面提示“调用的目标发生了异常”
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法