我需要根据 SQLExceptions 分离 ErrorCode 。我在 if 中有以下 catch block 语句,但始终打印 else 条件。

catch (SQLException ex) {

      if (ex.getErrorCode() == 28502){
         System.out.println("Username Problem");
      }

      else{
         System.out.println("Other Problem");
      }

     Logger.getLogger(FirstTimeMainFrame.class.getName()).log(Level.SEVERE, null, ex);

}

实际上,当我在创建数据库时输入意外的 username 时,会抛出以下 SQLExceptions
java.sql.SQLException: Failed to create database 'myDB', see the next exception for details.
//rest of exception.
Caused by: ERROR XJ041: Failed to create database 'myDB', see the next exception for details.
//rest of exception.
Caused by: ERROR XBM01: Startup failed due to an exception. See next exception for details
//rest of exception.
Caused by: ERROR 28502: The user name 'AAA.AAA' is not valid.
//rest of exception.

但是我的 catch 总是打印 Other Problem 。如何根据最后一个 SQLExceptions 分离不同的 ErrorCode

最佳答案

--- 已解决 ---

首先感谢@blm 的路由评论。

技巧是; 其他即将到来的 Exceptions(第一和第二)在他们的 String 中有 SQLState 值,在他们的 ErrorCode 中只有数值。
SQLException 链第三个 exception28502 SQLStateErrorCode 。这是我认为的第一个和第二个 Exceptions 之间的区别。

所以我改变了我的

捕捉块;

catch (SQLException se) {

      do {

         if(se.getSQLState().equals("28502")){
            System.out.println("Username Problem");
         }

         else{
            System.out.println("Other Problem");
         }

      } while ((se = se.getNextException()) != null);

}

输出是;
Other Problem
Other Problem
Username Problem

10-08 11:56