spring jdbc异常处理原理深度分析

1.异常处理
使用传统JDBC API时,通过java.sql.SQLException类型来包括一切的异常情况,并没有异常具体告知,如果要得到具体异常内容要通过sqlexception的getErrorcode得到errorcode然后从具体数据库提供商提供的errorcode列表对比,得到最终的错误信息,同时异常为checked异常,需要客户端捕获。
spring jdbc提供了统一异常处理机制,这套机制的基类为DataAccessException,是RuntimeException的一种类型,因此不需要客户端处理
spring jdbc在使用期间捕获可能发生的sqlexception(普通jdbc抛出),通过sqlexceptiontranslator转译到spring的数据访问异常体系,sqlexceptiontranslator具体实现类如下:

sqlerrorcodesqlexception具体处理过程:
1)首先检查自定义的异常类能不能转译异常

2)如果是java 6以上,还会尝试让sqlexceptionsubclasstranslator来转译
3)使用sqlerrorcodefactory加载的sqlerrorcodes来处理
加载sqlerrorcodes的步骤:
3.1)加载org.springframework.jdbc.support的sql-error-codes.xml,此配置文件配置不同数据库厂商自定义的errorcode到spring数据访问异常体系的映射

4)如果还是不能解决此异常,则使用 SQLStatesqlException来处理

附: SQLStatesqlException处理步骤
sqlstate要求遵循XOPEN SQLstate协议或者SQL 99协议,因此不同数据库所返回的sqlstate都是一样的
1)为每种spring异常类建立一个hashset,通过static方法向其中放入对应的sqlstate

2)取得sqlstate,通过ifelse遍历spring的异常,查找与sqlstate对应的spring异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值