当前位置: 代码迷 >> J2EE >> ConstraintViolationException错误,但没有执行 catch(ConstraintViolationException e)中的代码
  详细解决方案

ConstraintViolationException错误,但没有执行 catch(ConstraintViolationException e)中的代码

热度:575   发布时间:2016-04-17 23:28:25.0
ConstraintViolationException异常,但没有执行 catch(ConstraintViolationException e)中的代码
程序打出的异常是ConstraintViolationException异常,

但奇怪的而是

 catch(ConstraintViolationException e)的代码没有被执行,而是直接执行catch(Exception e1)的代码呢

 catch(ConstraintViolationException e){
System.out.println("没有执行");
}catch(Exception e1){
System.out.println("执行了");
}
------解决思路----------------------
}catch(Exception e1){
    //在这里测试一下e1是不是ConstraintViolationException类型
    System.out.println(e1 instanceof ConstraintViolationException);
    System.out.println(e1.getClass());
    System.out.println("执行了");
}

------解决思路----------------------

再仔细看看异常类型
------解决思路----------------------
引用:
Quote: 引用:


再仔细看看异常类型


你好,但我的TOMCAT控制台上的确打出的是 ConstraintViolationException异常 ,但是就不是不知道为什么没有捕获到,反倒是直接在Exception中做了捕获。


看你上面的回复 你下层向上抛的异常是exception?那你的异常实际上就是exception不是别的类型吧
------解决思路----------------------
catch不要用ConstraintViolationException  用Exception  然后打出异常,看看具体是什么
------解决思路----------------------
违反唯一约束条件,是你操作的表中有外键,或者你操作的表的主键是别的表的外键,好好看看你操作的表与表之间的关系
------解决思路----------------------
你直接拿e instanceof ConstraintViolationException 试试
------解决思路----------------------
引用:
Quote: 引用:

catch不要用ConstraintViolationException  用Exception  然后打出异常,看看具体是什么
catch (ConstraintViolationException e) {
System.out.println("1111111111111111111111111111111111111111111111111111111");
}catch (Exception e) {
        Throwable cause = e.getCause();
        if(cause instanceof ConstraintViolationException) {
         System.out.println("222222222222222222222222222222222222222222222222222222");
        }else{
         System.out.println("33333333333333333333333333333333333333333333333333333");
        }
}

结果打出的是222222222222222,详细异常信息见下楼



这种奇葩问题我也没遇到过。

建议:还是用Exception捕获,但是异常里面判断下,如果是那个异常,那你继续做其他的业务操作,可提示、可返回