Open Zakariyya opened 4 years ago
date: 2019-01-24 16:04:23 今天碰到个问题
经过不断 ctrl + 鼠标左键 ,找到
java.lang.Exception |-- java.sql.SQLException |-- SQLNonTransientException |-- SQLIntegrityConstraintViolationException
SQLIntegrityConstraintViolationException 和 SQLException 都没法被 try catch,该贴指出用 DataIntegrityViolationException 或 Exception 来捕获。
该贴指出用:捕捉到这个异常后要调用 .getCause() 方法才能获取真实的异常信息。
于是
try { userRepository.save(data); } catch (DataIntegrityViolationException e) { // 存在相同的唯一索引数据 log.info("e.getCause().getCause().getMessage() ==> "+e.getCause().getCause().getMessage()); } 打印: e.getCause().getCause().getMessage() ==> Duplicate entry 'anan1529' for key 'account'
正是我需要的内容,对信息处理下后即可作为错误信息返回出去,将该思路抽取到 CoreService 中所有代码服用,每次新增 唯一索引 的需求,,只需要在数据库字段添加唯一标识,而不需要修改代码。
检查性异常 : 指在编译时即可查出的异常,会在编译时抛出,常见异常如下 非检查性异常 : 通常时由于业务,流程导致不可预测的异常,比方说 空指针异常,IO流异常等,通常为 RuntimeException
参考:
好久没有写跟java相关的笔记了,啧啧啧
前提场景
先解决问题
经过不断 ctrl + 鼠标左键 ,找到
SQLIntegrityConstraintViolationException 和 SQLException 都没法被 try catch,该贴指出用 DataIntegrityViolationException 或 Exception 来捕获。
该贴指出用:捕捉到这个异常后要调用 .getCause() 方法才能获取真实的异常信息。
于是
正是我需要的内容,对信息处理下后即可作为错误信息返回出去,将该思路抽取到 CoreService 中所有代码服用,每次新增 唯一索引 的需求,,只需要在数据库字段添加唯一标识,而不需要修改代码。
底下补充内容
Exception
eg
参考: