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异常