在catch块中抛出异常

时间:2012-09-29 12:14:05

标签: java mysql exception

    public void onClick() throws SQLException   
  try {
 // Do something
} catch(MySQLIntegrityConstraintViolationException e) { 
     //Can i convert this exception to SQL Exception
}

我可以将MySQLIntegrityConstraintViolationException转换为方法抛出的SQLException吗?

4 个答案:

答案 0 :(得分:4)

但MySQLIntegrityConstraintViolationException已经 一个SQLException(通过继承)!所以没有必要重新抛出它(只需删除try / catch-block)。

答案 1 :(得分:3)

当然,如果您认为它可以增加更多信息或使您的想法更加通用,那么您可以进行包装和重新抛出。我认为在这种情况下,您捕获的异常会提供比您正在考虑的更多的信息。

但我不会选择SQLException。这是一个经过检查的例外。我认为潮流已经从检查变为未经检查的例外。

Spring将SQLExceptions包装到未经检查的扩展RuntimeException的DataAccessException中。我建议你效仿。

这是你应该怎么做的:

catch(MySQLIntegrityConstraintViolationException e) { 
    throw new SQLException(e);
}

不要只传递消息。给出整个堆栈跟踪。

答案 2 :(得分:1)

您可以使用SQLException的构造函数在Catch块中创建一个..

try {
} catch (MySQLIntegrityConstraintViolationException e) {
    throw new SQLException(e);
}

答案 3 :(得分:1)

由于MySQLIntegrityConstraintViolationExceptionSQLException的子类,因此不需要重新投掷。如果要从数据库特定的详细信息中抽象业务逻辑层,请确保在逻辑层中捕获SQL异常,以便即使数据库已切换,逻辑仍然有效。