猿问

如何通过 DataAccessException 检索 postgres 数据库上的 SQL

我正在尝试使用 postgresql 数据库上的 spring data jpa 从数据库中删除一条记录,我需要捕获 sql 错误代码


try {

    userRepository.deleteUser(id);

} catch(org.springframework.dao.DataAccessException e) {

    // here

}

如何在 catch 块中获取 sql 错误代码?getCause 或 getMessage 方法未检索 sql 错误代码


爪哇postgresql冬眠jdbc弹簧数据-jpa


SMILET
浏览 141回答 1
1回答

萧十郎

在接口的官方 JavaDocSQLExceptionTranslator中,我们找到了这个提示:返回的 DataAccessException 应该包含作为根本原因的原始异常。 SQLException但是,由于 DataAccessExceptions 也可能由其他资源 API 引起,因此客户端代码通常可能不依赖于此。也就是说,当期望发生基于 JDBC 的访问时,getRootCause() instanceof SQLException检查(和后续转换)被认为是可靠的。因此,考虑到这些信息,您可以编写如下代码:try {    userRepository.deleteUser(id);} catch(org.springframework.dao.DataAccessException e) {    if( e.getRootCause() instanceof SQLException) {        SQLException sqlEx = (SQLException) e.getRootCause();        int sqlErrorCode = sqlEx.getErrorCode();        // do further things from here on...    }}希望这可以帮助。
随时随地看视频慕课网APP

相关分类

Java
我要回答