程序打出的异常是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("执行了");
}
------解决思路----------------------
再仔细看看异常类型
------解决思路----------------------
看你上面的回复 你下层向上抛的异常是exception?那你的异常实际上就是exception不是别的类型吧
------解决思路----------------------
catch不要用ConstraintViolationException 用Exception 然后打出异常,看看具体是什么
------解决思路----------------------
违反唯一约束条件,是你操作的表中有外键,或者你操作的表的主键是别的表的外键,好好看看你操作的表与表之间的关系
------解决思路----------------------
你直接拿e instanceof ConstraintViolationException 试试
------解决思路----------------------
catch (ConstraintViolationException e) {
catch不要用ConstraintViolationException 用Exception 然后打出异常,看看具体是什么
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捕获,但是异常里面判断下,如果是那个异常,那你继续做其他的业务操作,可提示、可返回