【问题标题】:How to catch SqlInvalidAuthorizationSpecException in JDBC Template?如何在 JDBC 模板中捕获 SqlInvalidAuthorizationSpecException?
【发布时间】:2017-12-22 09:41:46
【问题描述】:

我的 Spring Bacth 应用程序中有以下代码:

JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSouce);       
        log.debug(getPropKey()+"Calling DB for records...");


    List<DataLoadRecordClass> rows = null;

try {
    rows = jdbcTemplate.query(queryStringFormated, new DataRecordRowMapper());
} catch (Exception ex) {
    log.error(getPropKey()+"FATAL: Database call failed wtih : " + ex.getMessage());
}

如果我输入错误的用户/密码,它会抛出

2017-07-17 13:38:31,945 31363 ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization. 
com.ibm.db2.jcc.am.SqlInvalidAuthorizationSpecException: [jcc][t4][2013][11249][4.12.55] Connection authorization failure occurred.  Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000

但是上面的尝试没有捕捉到它。我怎样才能捕捉到这些错误,以便我可以正确处理它们?现在我什至不能告诉一个错误发生了,不管是什么错误或什么时候发生的。

我看过很多这样的 Stack Over Flow 帖子,但他们似乎都说 catch "DataAccessException" 我试过但没有奏效,但捕捉 Exception 应该可以捕捉到任何/一切,对吗?

【问题讨论】:

  • 您应该编写单独的 catch 块来捕获 SqlInvalidAuthorizationSpecException 或者您可以 printStackTrace
  • 已经试过了。你不能捕获 SqlInvalidAuthorizationSpecException(编译器会阻止你),如果你能捕获异常应该捕获它。
  • 这没有帮助。我故意测试不良用户/通行证的情况。我期待错误。

标签: java jdbc exception-handling db2


【解决方案1】:

抱歉,代码正在捕获错误,只是 JDBC 在到达我的错误处理程序之前转储了堆栈跟踪,并且日志文件中的所有噪音都掩盖了我的消息。烦人,但我可以解决它。

【讨论】:

  • 捕获它的不是 JDBC,而是您的连接池 (HikariCP) 在尝试向池中添加连接时执行此操作。
【解决方案2】:

try-catch 只是包装了一个查询。该错误表明您的连接池初始化失败,可能是由于数据源配置错误。此初始化发生在您问题中的 try-catch 之外(之前)。

【讨论】:

  • 实际上,根据堆栈跟踪,异常发生在我班级的第 304 行,也就是上面 try/catch 中的行。
  • 也许你可以分享更多你的代码?到目前为止,我在您提供的内容中没有看到任何行号。
猜你喜欢
  • 2015-01-26
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多