通过异常来提示发生主键冲突
2017-02-10 20:06
134 查看
进行数据库操作,总是会遇到各种各样的异常,如何得到反馈,并给用户友好的提示需要做一番功夫。
比如说如果用户输入了一个已经存在的用户名(主键)的话,下层会返回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(); } }
这样就获取到了主键冲突的异常,可以进行我们的相应处理了,比之前把所有的异常一股脑儿都打印出来要好一些。
转载于:https://my.oschina.net/u/1465239/blog/835766
相关文章推荐
- 通过异常来提示发生主键冲突
- 学会了怎么样利用捕获异常提示数据库主键重复错误
- Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
- Visual Studio 2010编译时总是提示"调用目标发生了异常"的解决
- MDaemon 10.1.2 通过Webclient发邮件时,提示“发邮件时发生错误"
- xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。
- 未处理的异常:0xC0000005:读取位置0xabababab时发生访问冲突
- 【C/C++】【FAQ】【内存泄露】未处理的异常:0xC0000005:读取位置0xabababab时发生访问冲突
- 关于 xxxx.exe 中的 0xxxxxxxx 处最可能的异常: 0xC0000005: 读取位置 0xxxxxxxx 时发生访问冲突
- 奇怪了。单步调试抛主键冲突异常。直接运行是正常的
- 0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- oracle 10g 在win7下安装,提示程序异常终止,发生未知错误
- Windows7下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法
- 0x77C01E0B (ntdll.dll) (Critical.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突。
- w7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
- oracle 10g 在win7 32位下安装,提示程序异常终止,发生未知错误
- Windows7 Server 2008 下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法
- Demo.exe 中的 0x10001fdd 处最可能的异常: 0xC0000005: 读取位置 0x0000001c 时发生访问冲突
- 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- Windows7下安装Oracle 10g提示“程序异常终止,发生未知错误”的解决方法