我需要根据 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
链第三个 exception
有 28502
SQLState
和 ErrorCode
。这是我认为的第一个和第二个 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