Spring中的DataAccessException

Spring的DAO框架没有抛出与特定技术相关的异常,例如SQLException或HibernateException,抛出的异常都是与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦合在一起。DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去处理这类异常,遵循了Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;并且NestedRuntimeException的子类,是可以通过NestedRuntimeException的getCause()方法获得导致该异常的另一个异常。Spring的异常分类有
Spring的DAO异常层次
异常

何时抛出

[table]
|CleanupFailureDataAccessException 一项操作成功地执行,但在释放数据库资源时发生异常(例如,关闭一个Connection)
|
|DataAccessResourceFailureException 数据访问资源彻底失败,例如不能连接数据库
|
|DataIntegrityViolationException Insert或Update数据时违反了完整性,例如违反了惟一性限制
|
|DataRetrievalFailureException 某些数据不能被检测到,例如不能通过关键字找到一条记录
|
|DeadlockLoserDataAccessException 当前的操作因为死锁而失败
|
|IncorrectUpdateSemanticsDataAccessException Update时发生某些没有预料到的情况,例如更改超过预期的记录数。当这个异常被抛出时,执行着的事务不会被回滚
|
|InvalidDataAccessApiusageException 一个数据访问的JAVA API没有正确使用,例如必须在执行前编译好的查询编译失败了
|
|invalidDataAccessResourceUsageException 错误使用数据访问资源,例如用错误的SQL语法访问关系型数据库
|
|OptimisticLockingFailureException 乐观锁的失败。这将由ORM工具或用户的DAO实现抛出
|
|TypemismatchDataAccessException Java类型和数据类型不匹配,例如试图把String类型插入到数据库的数值型字段中
|
|UncategorizedDataAccessException 有错误发生,但无法归类到某一更为具体的异常中|
[/table] Spring的DAO异常层次是如此的细致缜密,服务对象能够精确地选择需要捕获哪些异常,捕获的异常对用户更有用的信息,哪些异常可以让她继续在调用堆栈中向上传递。
Spring DataAccessExceptionSpring框架的一个异常类,它是所有数据访问异常的父类。当使用Spring DataAccess组件时,如果在数据访问的过程发生异常,Spring会将其封装为DataAccessException并抛出,以提供统一的异常处理。 Spring DataAccessException是一个运行时异常,意味着它不需要在方法签名进行声明,也不需要捕获或处理。它会在数据访问的过程自动抛出,并在异常发生的地方打断程序的正常流程。 Spring DataAccessException的子类包括但不限于以下几种: 1. EmptyResultDataAccessException:当执行查询操作时,如果结果为空,则抛出该异常。 2. IncorrectResultSizeDataAccessException:当执行查询操作时,如果结果的大小与预期不匹配,则抛出该异常,通常是由于查询结果数量的错误引起的。 3. DataIntegrityViolationException:当进行数据插入、更新、删除等操作时,发生数据库完整性约束冲突时,将抛出该异常。 4. OptimisticLockingFailureException:当使用乐观锁机制时,如果在更新数据时发生冲突,即版本号不匹配,则抛出该异常。 在处理Spring DataAccessException时,一般可以使用try-catch块来捕获,然后根据具体的异常类型进行不同的处理。比如,对于EmptyResultDataAccessException可以返回空值或者抛出自定义的异常,对于DataIntegrityViolationException可以进行事务回滚等。 总之,Spring DataAccessException提供了统一的异常处理机制,使得我们可以更加方便地处理数据访问异常,保证程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值