Java 如何抓住;无效的十六进制数字";?

Java 如何抓住;无效的十六进制数字";?,java,sql,oracle,exception-handling,Java,Sql,Oracle,Exception Handling,我有一个程序,其中会抛出一个SQLException: java.sql.SQLException: Fail to convert to internal representation: Invalid hex digit 由于输入数据无效,因此在oracle.sql.RAW.hexString2Bytes中抛出错误 如何在不捕获所有其他SQLException的情况下捕获此特定错误?您不能这样做。Java根据异常类型捕获异常(本例中为SQLException)。但是,您仍然可以捕获所有SQ

我有一个程序,其中会抛出一个SQLException:

java.sql.SQLException: Fail to convert to internal representation: Invalid hex digit
由于输入数据无效,因此在oracle.sql.RAW.hexString2Bytes中抛出错误


如何在不捕获所有其他SQLException的情况下捕获此特定错误?

您不能这样做。Java根据异常类型捕获异常(本例中为
SQLException
)。但是,您仍然可以捕获所有
SQLException
对象,检查异常消息,然后只处理您感兴趣的异常(具有指定消息的异常)

你可以通过两种方法得到它

一种是返回
int
,针对
SQLException
对象的特定于供应商的异常代码,并比较
int
(我不知道“无效十六进制数字”的异常代码,但可能是您可以通过
System.out.println()
)获得该异常代码)

另一种方法是通过获取异常消息并检查消息字符串


进一步,您可以参考:

您可以处理您的异常,如果要处理或不处理,请检查条件。如果未处理,您可以将原始异常抛出到外部catch块进行处理

try {
    ... your code here ...
} catch (SqlException e) {
    if (e.getErrorCode() == ...) {
        ... do your exception handling
    } else {
        throw e;  // <-- re-throw the original Exception
    }
}
试试看{
…你的代码在这里。。。
}捕获(SQLE异常){
如果(如getErrorCode()==…){
…执行异常处理
}否则{

throw e;//我认为不太可能设置错误代码,因为这不是数据库错误而是驱动程序错误。@RobbyCornelissen我现在没有资源来测试它,但是你可以测试它,删除数据库jar文件并打印错误代码,我想你会得到找不到类的错误代码。错误代码是17059。它真的是供应商规范吗这意味着,如果我切换dbms,我必须重写异常处理。@如果是,对于某些其他供应商,错误代码可能不同,但要不重写代码,可以在配置文件(属性)中的某个位置进行设置然后从那里检索,所以将来,如果您更改了数据库供应商,您不需要使用现有代码,只需更新属性即可。