Java - 查找异常的第一个原因

2022-09-01 04:04:24

我需要检查异常是否由某些数据库问题引起。我收到一个异常,并检查其原因是否包含“ORA”字符串并返回该字符串(类似于“ORA-00001”)。这里的问题是,我收到的异常嵌套在其他异常中,因此,如果我不知道它是否是oracle异常,则必须检查该异常的原因,依此类推。有没有更清洁的方法可以做到这一点?有没有办法知道给定异常的第一个原因(深嵌套异常)?

我当前的代码如下所示:

private String getErrorOracle(Throwable e){
        final String ORACLE = "ORA";
        if (e.getCause() != null && e.getCause().toString().contains(ORACLE)){
            return e.getCause().toString();
        } else if(e.getCause() != null){
            return getErrorOracle(e.getCause());
        } else {
            return null;
        }
    }

答案 1

为了不重新发明轮子,如果你使用的是Apache Commons Lang,那么看看ExasionUtils.getRootCause()

是否值得为此而包含一个图书馆?也许不是。但是,如果你已经在类路径上有了它,它就在那里为你服务,并注意它做了一些“幼稚”实现可能不会做的事情(例如,处理原因链中的循环......呃!


答案 2

如果你已经在使用番石榴,那么Throwables.getRootCause()来救援。


推荐