public void onClick() throws SQLException
try {
// Do something
} catch(MySQLIntegrityConstraintViolationException e) {
//Can i convert this exception to SQL Exception
}
我可以将MySQLIntegrityConstraintViolationException转换为方法抛出的SQLException吗?
答案 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)
由于MySQLIntegrityConstraintViolationException
是SQLException
的子类,因此不需要重新投掷。如果要从数据库特定的详细信息中抽象业务逻辑层,请确保在逻辑层中捕获SQL异常,以便即使数据库已切换,逻辑仍然有效。