2014-06-30 50 views
0

我有一個計劃,其中的SQLException得到投擲:如何捕捉「無效的十六進制數字」?

java.sql.SQLException: Fail to convert to internal representation: Invalid hex digit 

誤差會在oracle.sql.RAW.hexString2Bytes拋出,因爲輸入的數據是無效的。

如何在不捕獲所有其他SQLExceptions的情況下捕獲此特定錯誤?

回答

1

你可以通過兩種方法得到它。

一是SQLException#getErrorCode()它會返回一個特定供應商的int,異常代碼爲SQLException對象,並對比int(我不知道「無效的十六進制數字」異常代碼,但可能是你可以得到這個與System.out.println()

和其他方法是你可以通過Throwable#getMessage()得到異常消息,並檢查消息字符串。

而且你可以參考:Retrieving Exceptions

+0

我認爲這不太可能會設置錯誤代碼,因爲它不是數據庫錯誤,而是驅動程序錯誤。 –

+0

@RobbyCornelissen我現在沒有資源來測試它,但你可以測試它,刪除數據庫jar文件並打印錯誤代碼,你會得到我認爲沒有找到的類的錯誤代碼。 –

+0

錯誤代碼是17059.它真的是供應商特定的嗎?這意味着,如果我切換dbms,我必須重寫異常處理。 – ceving

0

你不能這樣做。 Java中基於類型捕獲異常(本例中爲SQLException)。但是,您仍然可以捕獲所有對象,檢查異常消息,然後僅處理您感興趣的異常(具有指定消息的異常)。

1

您可以處理您的異常,檢查車況,如果你要處理與否。如果沒有處理,你可以把丟到原來的異常到外部catch塊來處理。

try { 
    ... your code here ... 
} catch (SqlException e) { 
    if (e.getErrorCode() == ...) { 
     ... do your exception handling 
    } else { 
     throw e; // <-- re-throw the original Exception 
    } 
} 
相關問題