微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JDBCtemplate 不允许捕获 SQLException

如何解决JDBCtemplate 不允许捕获 SQLException

我正在使用 Spring JDBC 并且我有这个测试方法来连接到 Postgresql DB(这是一个示例代码,这不是原始代码):

public void toConnect() {
    final String sql = "SELECT 1";
    template.execute(sql);
}

如果我捕获到 DataAccessException,并调用 getCause() 方法,程序无论如何都会触发 PLSQException(尽管最终打印了我在捕获中设置的消息)。

public void toConnect() throws CGConnException {
    final String sql = "SELECT 1";
    try {
        template.execute(sql);
    } catch (DataAccessException e) {
        throw new CGConnException("CG : Error DataBase connection. - ",e.getCause());
    }
}

问题在于我无法处理异常,我只想打印捕获的消息,而没有异常详细信息。

如果运行时配置参数出错或 Postgresql 数据库关闭,则会生成 PsqlException,这很好,但我需要控制此异常。但是 JdbcTemplate.execute(sql) 方法抛出一个 DataAccessException,因此,不可能在 try/catch 块上捕获 PsqlException(或者我不知道该怎么做)。所以,当程序运行时,控制台总是会出现堆栈跟踪:

2021-05-02 03:10:14.052 ERROR 73837 --- [           main] .PostgresClientTestConnectionApplication : Error : CG : Error DataBase connection.

在这种情况下,我只需要将日志打印为 “连接错误 或类似于上面示例的内容

提前致谢。

解决方法

其实没有错。异常被处理,程序最终在捕获它时正确。

try {
    template.execute(sql);
    logger.error("Connection Successful . . .");
} catch (Exception e) {
    logger.error("Error connection" + e.getMessage());
    throw new CGConnException("CG : Error DataBase connection. - ",e);
}

在运行控制台中,它会打印关联堆栈跟踪,因为 Spring 内部类会执行此操作,但这并不意味着我们做错了什么或没有处理异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?