首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataAccessException无法转换为SQLException以获取错误代码和sql状态。

DataAccessException无法转换为SQLException以获取错误代码和sql状态。
EN

Stack Overflow用户
提问于 2018-10-14 12:20:20
回答 1查看 2.6K关注 0票数 0

下面的代码片段来自Spring5Recipes的书(第386页)。我正在尝试运行和测试代码,但是获得了NullPointerExceptionsqle变量,而且在Spring 5中,SQLExceptionDataAccessException之间似乎没有任何关系。谁能告诉我为什么和如何?

代码语言:javascript
复制
package com.apress.springrecipes.vehicle;
...
import java.sql.SQLException;
import org.springframework.dao.DataAccessException;

public class Main {

    public static void main(String[] args) {
        ...
        VehicleDao vehicleDao = context.getBean(VehicleDao.class);
        Vehicle vehicle = new Vehicle("EX0001", "Green", 4, 4);
        try {
            vehicleDao.insert(vehicle);
        } catch (DataAccessException e) {
            SQLException sqle = (SQLException) e.getCause();
            System.out.println("Error code: " + sqle.getErrorCode());
            System.out.println("SQL state: " + sqle.getSQLState());
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-14 14:56:05

首先,永远不要检查e.getCause()是否返回null。如果它返回null,您的代码就容易受到NullPointerException的攻击

第二点是,为什么Spring改变了处理数据库/jpa异常的方式。已经有一些关于这方面的讨论了。例如,LINK

或者,您可以查看C.WallsJdbc的"Spring“一书,在有关JDBC的章节中,我们可以阅读其中的内容。

(10.1.1了解Spring的数据访问异常层次结构)

一方面,JDBC的异常层次结构过于通用--它根本不是一个层次结构。另一方面,Hibernate的异常层次结构对Hibernate是专有的。我们需要的是数据访问异常的层次结构,这些异常是描述性的,但不直接与特定的持久性框架相关联。

我强烈推荐整个章节来理解这个主题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52802575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档