我有一個計劃,其中的SQLException得到投擲:如何捕捉「無效的十六進制數字」?
java.sql.SQLException: Fail to convert to internal representation: Invalid hex digit
誤差會在oracle.sql.RAW.hexString2Bytes
拋出,因爲輸入的數據是無效的。
如何在不捕獲所有其他SQLExceptions的情況下捕獲此特定錯誤?
我有一個計劃,其中的SQLException得到投擲:如何捕捉「無效的十六進制數字」?
java.sql.SQLException: Fail to convert to internal representation: Invalid hex digit
誤差會在oracle.sql.RAW.hexString2Bytes
拋出,因爲輸入的數據是無效的。
如何在不捕獲所有其他SQLExceptions的情況下捕獲此特定錯誤?
你可以通過兩種方法得到它。
一是SQLException#getErrorCode()
它會返回一個特定供應商的int
,異常代碼爲SQLException
對象,並對比int
(我不知道「無效的十六進制數字」異常代碼,但可能是你可以得到這個與System.out.println()
)
和其他方法是你可以通過Throwable#getMessage()
得到異常消息,並檢查消息字符串。
而且你可以參考:Retrieving Exceptions
你不能這樣做。 Java中基於類型捕獲異常(本例中爲SQLException
)。但是,您仍然可以捕獲所有對象,檢查異常消息,然後僅處理您感興趣的異常(具有指定消息的異常)。
您可以處理您的異常,檢查車況,如果你要處理與否。如果沒有處理,你可以把丟到原來的異常到外部catch塊來處理。
try {
... your code here ...
} catch (SqlException e) {
if (e.getErrorCode() == ...) {
... do your exception handling
} else {
throw e; // <-- re-throw the original Exception
}
}
我認爲這不太可能會設置錯誤代碼,因爲它不是數據庫錯誤,而是驅動程序錯誤。 –
@RobbyCornelissen我現在沒有資源來測試它,但你可以測試它,刪除數據庫jar文件並打印錯誤代碼,你會得到我認爲沒有找到的類的錯誤代碼。 –
錯誤代碼是17059.它真的是供應商特定的嗎?這意味着,如果我切換dbms,我必須重寫異常處理。 – ceving