Java 捕获 mybatis异常_Spring与Mybatis整合后的SQL异常捕获

优秀文章

相关框架

后台: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 search(String str) throws DataAccessException;

Service

// 我是直接在Service处理异常(也可直接抛出不在此处理),处理方式是抛出新的异常(注释处),细节已省略;

public List search(String str) /*throws ServiceException*/ {

try {

return mapper.search(str);

} catch (DataAccessException e) {

// 处理异常

...

//throw new ServiceException(e.getMessage(), e);

}

}

最后

一个异常的抛出并不一定以其本身或超类的形式传递,因此要捕获该异常不可绝对的认为用其本身或超类可以捕获,也不可笼统的使用java.lang.Exception,追根溯源,找到其准确的传递形式才能正确的捕获并定位该异常;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值