有没有人能想到一个合理的理由,解释为什么SQLException
是一个已检查的异常?
是的,可能会出现查询语法错误
是的,连接可能断开了
是的,可能存在权限问题
等等,等等,诸如此类的问题
但实际上,在生产环境下,近乎100%的时间(一旦您开始运行),都不会出现任何问题。
如果出现问题,调用代码无法执行任何恢复操作,因此应将其设置为未检查的。
由于SQL的深奥性质,异常的多种原因和复杂性意味着您基本上无法进行恢复,除非异常是由于暂时的网络问题引起的,但即使在同步调用中,您也将失败,因为您不能无限期地等待网络问题得到解决,所以您必须失败事务。
通常,调用SQL看起来像这样:
try {
// make some SQL call(s)
} catch {SQLException e) {
// log the exception
return; // and give up
}
这样的代码没有任何价值。你无法采取任何合理的措施来恢复。与其如此,不如让运行时异常冒泡——即SQLException应该是一个运行时(未检查的)异常。
catch Exception
,它会捕获未经检查的异常,就像它捕获NPE一样;只是因为异常未经检查并不意味着您的“应用程序将崩溃”。如果您想要的话,仍然可以捕获特定的未经检查的异常。 - BohemianSQLException
实际上就是一个Error
:你基本上无法从中恢复 - 你的应用程序已经崩溃了 - 而且Errors
是不受检查的。为什么SQLException
也不是呢。 - Bohemian