优秀文章
博客:永生天地 > Spring的DataAccessException
相关框架
后台:Spring,Mybatis
记录原因
在整理数据持久层的异常规范时,对异常java.sql.SQLSyntaxErrorException进行捕获发现使用其父类java.sql.SQLException无法实现,若使用java.sql.Exception进行捕获可以实现但异常定位将不准确,后经过了解发现Spring只支持抛出org.springframework.dao.DataAccessException异常,该异常与实际异常java.sql.SQLSyntaxErrorException父类不相同,因此无法捕获;
解析异常
************
演示类:SQLSyntaxErrorException
访问修饰:public
完整名称:java.sql.SQLSyntaxErrorException
************
演示类的父类:SQLNonTransientException
访问修饰:public
完整名称:java.sql.SQLNonTransientException
************
演示类的父类的父类:SQLException
访问修饰:public
完整名称:java.sql.SQLException
************
演示类的父类的父类的接口:Iterable
访问修饰:public abstract interface
完整名称:java.lang.Iterable
************
演示类的父类的父类的父类:Exception
访问修饰:public
完整名称:java.lang.Exception
************
演示类的父类的父类的父类的父类:Throwable
访问修饰:public
完整名称:java.lang.Throwable
************
演示类的父类的父类的父类的父类的接口:Serializable
访问修饰:public abstract interface
完整名称:java.io.Serializable
************
演示类的父类的父类的父类的父类的父类:Object
访问修饰:public
完整名称:java.lang.Object
************
演示类:DataAccessException
访问修饰:public abstract
完整名称:org.springframework.dao.DataAccessException
************
演示类的父类:NestedRuntimeException
访问修饰:public abstract
完整名称:org.springframework.core.NestedRuntimeException
************
演示类的父类的父类:RuntimeException
访问修饰:public
完整名称:java.lang.RuntimeException
************
演示类的父类的父类的父类:Exception
访问修饰:public
完整名称:java.lang.Exception
************
演示类的父类的父类的父类的父类:Throwable
访问修饰:public
完整名称:java.lang.Throwable
************
演示类的父类的父类的父类的父类的接口:Serializable
访问修饰:public abstract interface
完整名称:java.io.Serializable
************
演示类的父类的父类的父类的父类的父类:Object
访问修饰:public
完整名称:java.lang.Object
实现
Mapper
List<Model> search(String str) throws DataAccessException;
Service
// 我是直接在Service处理异常(也可直接抛出不在此处理),处理方式是抛出新的异常(注释处),细节已省略;
public List<Model> search(String str) /*throws ServiceException*/ {
try {
return mapper.search(str);
} catch (DataAccessException e) {
// 处理异常
...
//throw new ServiceException(e.getMessage(), e);
}
}
最后
- 一个异常的抛出并不一定以其本身或超类的形式传递,因此要捕获该异常不可绝对的认为用其本身或超类可以捕获,也不可笼统的使用java.lang.Exception,追根溯源,找到其准确的传递形式才能正确的捕获并定位该异常;