首页 > 解决方案 > Spring JDBCTemplate 执行不抛出异常

问题描述

我有一个spring应用程序,它的一个功能是能够获取任何一段SQL并运行它,轮询器轮询文件夹中包含SQL文件位置的触发器文件,然后应用程序读取SQL文件并将内容放入“sqlquery”消息头中。

我们似乎遇到的问题是当 SQL 失败时没有抛出异常。

    try
    {
        if ((msg.getHeaders().containsKey("sqlQuery"))&&(!"".equals(msg.getHeaders().get("sqlQuery"))))
        {
            _log.debug("Executing: " + msg.getHeaders().get("sqlQuery"), UID);
            jdbcTemplate.execute((String) msg.getHeaders().get("sqlQuery"));
            _log.info("Query executed successfully.", UID);
        }

        result = "S";
    } catch (Exception ex) {
        ex.printStackTrace();
        _log.error(ex, ex, UID);
    }

JDBC Drivers 是 Microsoft JDBC Driver 4.2,连接到 SQL Server 2014 数据库。

我尝试使用简单的“选择 1/0”来运行它,这显然会引发除以零错误,但我们得到了成功的响应。

2018-07-19 16:36:01,738|org.springframework.jdbc.datasource.DataSourceUtils|sqlFileChannelTaskExecutor-6|DEBUG|Returning JDBC Connection to DataSource
2018-07-19 16:36:01,738|org.springframework.integration.transformer.MessageTransformingHandler|sqlFileChannelTaskExecutor-6|DEBUG|org.springframework.integration.transformer.MessageTransformingHandler@c6d1b7 received message: GenericMessage [payload={UPDATED=1}, headers={UID=MCTest, errorChannel=logSqlErrorChannel, id=318f54b8-2889-22af-1009-e191550c75eb, sqlQuery=Select 1/0, timestamp=1532014561738}]
2018-07-19 16:36:01,738|org.springframework.beans.factory.support.DefaultListableBeanFactory|sqlFileChannelTaskExecutor-6|DEBUG|Returning cached instance of singleton bean 'integrationEvaluationContext'
2018-07-19 16:36:01,738|org.springframework.beans.factory.support.DefaultListableBeanFactory|sqlFileChannelTaskExecutor-6|DEBUG|Returning cached instance of singleton bean 'integrationConversionService'
2018-07-19 16:36:01,738|MCTest|sqlFileChannelTaskExecutor-6|DEBUG|SQL Step Started
2018-07-19 16:37:16,926|MCTest|sqlFileChannelTaskExecutor-6|DEBUG|Executing: Select 1/0
2018-07-19 16:37:22,530|org.springframework.jdbc.core.JdbcTemplate|sqlFileChannelTaskExecutor-6|DEBUG|Executing SQL statement [Select 1/0]
2018-07-19 16:37:28,278|org.springframework.jdbc.datasource.DataSourceUtils|sqlFileChannelTaskExecutor-6|DEBUG|Fetching JDBC Connection from DataSource
2018-07-19 16:37:28,278|org.springframework.jdbc.datasource.DriverManagerDataSource|sqlFileChannelTaskExecutor-6|DEBUG|Creating new JDBC DriverManager Connection to [jdbc:sqlserver://<Server>;databaseName=<Database]
2018-07-19 16:37:33,069|org.springframework.jdbc.datasource.DataSourceUtils|sqlFileChannelTaskExecutor-6|DEBUG|Returning JDBC Connection to DataSource
2018-07-19 16:37:33,069|MCTest|sqlFileChannelTaskExecutor-6|INFO |Query executed successfully.

谁能帮助解释为什么没有捕获/抛出异常?

标签: javasqlspringjdbctemplate

解决方案


分享您的查询.. 并使用catch (ArithmeticException ae)where 就好像您在理解 1/0 ArithmeticException时遇到问题。

希望它会奏效。


推荐阅读