当前位置: 首页 > 面试题库 >

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

於意蕴
2023-03-14
问题内容

我需要检查异常是否由某些数据库问题引起。我收到异常,并检查其原因是否包含“ 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;
        }
    }

问题答案:

只需遍历异常链,直到无缘无故地到达异常,然后返回该消息(如果需要最后一条消息)。

如果有原因,您的函数只会得到第一个原因。

但是,您可能希望查找包中的第一个原因,因为实际的最深层原因可能是oracle异常,这很有用,但是除非您看到问题的出处,否则您将很难解决它。



 类似资料:
  • 我是JRakNet的创建者,JRakNet是一个网络库,它实现了适用于Java的最新协议RakNet的基础知识。我制作了这个库,这样我就可以为使用RakNet的Minecraft:携带版制作一个多人游戏服务器。 然而,我在服务器和客户端遇到的一个问题是处理程序的异常处理。每当发送无效数据包时,数据就会被错误读取,异常就会像正常情况一样被抛出。然而,我需要找到一种方法来找出导致异常的外部地址。 通常

  • 最近,我在我的netty4项目中找到了一些。 有人说在使用start netty的ServerBootstrap的sync()方法时会导致死锁,因为sync()会调用await()方法,而await()中有一个叫‘check deadlock’的方法。 但我不这么认为。ServerBootstrap使用名为boosGroup的EventLoopGroup,Channel使用workerGroup来

  • 我们使用CDI和CMT(容器管理事务)连接到web应用程序中的数据库,并标记从前端调用的方法,这些方法需要使用以下事务: 这将创建一个新的CDI事务,但是现在如果在执行此代码块或从此方法调用的任何其他代码块时发生异常,它将抛出错误消息: 有没有办法让CDI重新抛出嵌套错误,以便您可以轻松地调试回滚的真正原因是什么? (在 Java-EE7、Glassfish 4.0、JSF 2.2.2 上运行)

  • 本文向大家介绍浅谈十个常见的Java异常出现原因,包括了浅谈十个常见的Java异常出现原因的使用技巧和注意事项,需要的朋友参考一下 异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。 1、NullPointerException 空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常。具体看上篇文章:

  • 问题内容: 根据python文档,自python 2.5开始支持相对导入和内部包引用。我当前正在运行Python 2.7.3。因此,我尝试在自己的程序包中实现此功能,以便将其用于更简单的导入。我很惊讶地发现它引发了SyntaxError异常,我希望有人可以帮助您找到原因。 我设置了一个测试目录进行测试: 两个__init__.py模块都为空。其他模块是: 当我尝试导入second_level模块时

  • 我试图解组xml导致saxparser异常,因为元素的值有一个未正确关闭的标记元素。这是我得到的,我必须处理的。 这里是示例xml- 上面的xml和其他字符串一起作为命令的值,标签没有正确关闭,导致以下异常- [org.xml.sax.saxpasseeption;行号:1;列号:212;元素类型“ctag”后面必须跟有属性规范,” 将xml输入作为字符串阅读器提供给unMarshall 我有两个