gpt4 book ai didi

java - 链式 java.lang.SQLException 实例与 Throwable#getCause

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:13 25 4
gpt4 key购买 nike

SQLException 的“链”背后的语义是什么?对象,这与 Throwable 类上的 getCause 方法形成的相似(隐式)链有何不同?

由于 SQLException 也是一个 Throwable,该类的一个实例可以有两个这样的“链”:

  • 由一系列 getNextException() 调用定义 - 直到最终返回 null
  • 另一个由一系列 getCause() 调用定义 - 直到最终返回 null

...在这种情况下,这两条链将如何相互关联?

最佳答案

SQLException.setNextException(Exception)SQLException.getNextException()允许从单个方法调用返回多个不同的 SQLException。这些 SQLException 不是彼此导致的。

实际发生的情况很少见,但假设我执行了一个带有 2 个参数的准备好的插入语句。其中一个参数太长,另一个为空,而该列为 NOT NULL。数据库可以(尽管我相信大多数数据库不会)将这两个错误报告给驱动程序。但由于 executeUpdate 方法只能抛出一个 SQLException,因此这些错误使用 setNextException 链接在一起。这样您就可以找出两种错误情况

还要注意 SQLException 有一个 iterator()方法,它允许您遍历每个 SQLException 及其原因(即:当前 SQLException、当前 SQLException 的所有原因、下一个 SQLException 如果有的话

它类似于对 SQLWarning 使用 getNextWarning() 如果发生多个警告(并发或顺序),它们将链接在一起。 SQLWarning 不会抛出,但会在生成警告的对象上可用(例如 Connection.getWarnings()Statement.getWarnings() 等)。此方法返回第一个警告,并允许您使用 getNextWarning() 发现其他警告。

关于java - 链式 java.lang.SQLException 实例与 Throwable#getCause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com