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

标签 java jdbc

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/

相关文章:

java - 在java中使用Phantomjs在selenium中另存为pdf

java - HashMap 会通过字符串类型提供对对象数组的有效访问吗?

mysql - 苦苦挣扎-在JAVA中找不到类异常: com. mysql.jdbc.Driver

java - JDBC动态查询,如果不是-1则只将值写入字符串

java - Java中两个ResultSet的比较

java - 应用程序崩溃(与 Firebase 身份验证相关)

java - 如何在java项目中提取PE-Header信息?

java - 限制 HashMap 接受特定的字符串键

java - 我有选择查询问题

Java JDBC 连接状态