看看SQLException javadocs,getCause和之间似乎有重叠getNextException.第一个返回Throwable,但是否则它们似乎几乎可以互换.
两者有什么区别?在开发JDBC驱动程序时,是否有关于何时选择其中一个作为异常链接机制的指导原则?
Mar*_*eel 14
该方法getCause()为您提供特定原因(如果有)SQLException.另一方面,在处理期间,完全可能发生多个异常,考虑批处理,多个查询参数的服务器端错误(例如,太长,转换错误等).
这些多个异常处于同一级别(它们不是彼此原因),因此它们被添加到SQLExceptions 链中.这个链的头是抛出的异常.要SQLException使用链中的其他s,请使用getNextException().例如
try {
// Something that produces multiple SQLExceptions
} catch (SQLException e) {
SQLException current = e;
do {
// do something with current
} while ((current = current.getNextException()) != null)
}
Run Code Online (Sandbox Code Playgroud)
另一方面,a SQLException还有一个方法public Iterator<Throwable> iterator()(在Java 6/JDBC4中引入),它SQLException在继续到SQLException链中的下一个之前迭代每个及其原因.
SQL操作可能由于几个独立原因而失败 - 例如,您可能尝试更新多行,并且不存在三行.这三个失败是独立的 - 没有一个导致另一个失败.这getNextException()是合适的 - 你可以setNextException()在构造异常时使用.
另一方面,如果整个操作失败,因为在IOException与数据库通信时,这是一个根本原因 - SQLException发生的唯一原因是因为IOException发生了.这getCause()是合适的 - 在创建时将原因传递给构造函数SQLException.
执行SQL语句可能会产生许多SQLExceptions,特别是如果它是批处理语句.假设您在一个批处理中插入10行而两个失败:您将收到一个异常,告诉您批处理失败,并且您应该使用getNextException方法来访问详细信息.这可能取决于数据库驱动程序.
将一个异常包装在另一个异常时使用异常的原因,例如抛出由IO或SQLException引起的特定于应用程序的异常.
| 归档时间: |
|
| 查看次数: |
4672 次 |
| 最近记录: |