Java SQLException 根据错误代码分开
Java SQLException separate according to errorcode
我需要根据ErrorCode
分开SQLExceptions
。我在 catch block
中有以下 if
语句,但总是打印 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
。我怎样才能根据上一个ErrorCode
分开不同的SQLExceptions
?
您应该使用捕获的 SqlExeption 对象的 'getCause()' 方法来获取原因异常。然后,您可以将结果转换为 Exception 并检查其错误代码。
检查此以获取更多信息:Throwable.getCause()
编辑:
SQLException temp = ex;
while(temp.getCause() != null)
{
temp = (Exception)temp.getCause();
}
// check if temp is SQLException and if it is check ((SQLException)temp).getErrorCode() == whatever you want
--- 已解决 ---
首先感谢@blm 的路由评论。
技巧是; 其他 Exceptions
(第 1 和第 2 个)在 SQLState
中有 String
个值 SQLState
只有数值 ErrorCode
.
SQLException
第三链 exception
有 28502
SQLState
和 ErrorCode
。我认为这就是第 1 和第 2 之间的区别 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
我需要根据ErrorCode
分开SQLExceptions
。我在 catch block
中有以下 if
语句,但总是打印 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
。我怎样才能根据上一个ErrorCode
分开不同的SQLExceptions
?
您应该使用捕获的 SqlExeption 对象的 'getCause()' 方法来获取原因异常。然后,您可以将结果转换为 Exception 并检查其错误代码。
检查此以获取更多信息:Throwable.getCause()
编辑:
SQLException temp = ex;
while(temp.getCause() != null)
{
temp = (Exception)temp.getCause();
}
// check if temp is SQLException and if it is check ((SQLException)temp).getErrorCode() == whatever you want
--- 已解决 ---
首先感谢@blm 的路由评论。
技巧是; 其他 Exceptions
(第 1 和第 2 个)在 SQLState
中有 String
个值 SQLState
只有数值 ErrorCode
.
SQLException
第三链 exception
有 28502
SQLState
和 ErrorCode
。我认为这就是第 1 和第 2 之间的区别 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