我想捕获 SQLException ,发送一些邮件,然后将异常发送到下一个目标。我的子类如下:
class myexception extends SQLException {
public myexception( Throwable cause ) throws SQLException {
super( cause );
... send mail ...
throw new SQLException( cause );
}
}
如果我已经包装了一个抛出SQLException的现有函数(' connect()'或者它):
public void somecall() throws myexception {
try {
... SQL call ...
} catch( SQLException sqlException ) {
throw new myexception( sqlException );
}
}
我可以重新抛出原始的SQLException,还是需要解压缩并创建一个新的? IE当我调用抛出新的SQLException(原因)时,我的类会产生运行时错误;
答案 0 :(得分:4)
有一种更清洁的方法来做你正在尝试的事情。
try {
sqlCall();
} catch (SQLExcetion e) {
sendMail();
throw e;
}
您不需要继承SQLException
。
答案 1 :(得分:1)
我不明白为什么不可能,但你需要捕获SQLException:
try{
try{
someCall();
}
catch(myException e) {
}
}
catch(SQLException e) {
// catches the thrown SQLException
//created by new myException(Throwable clause)
}
答案 2 :(得分:1)
在我看来,不应该使用例外来实现业务或框架逻辑(例如“在创建时发送电子邮件”)
实际框架本身应该用来做到这一点。
例如,如果您正在管理Inversion of Control(IoC)容器(如spring)中的所有软件组件,并且每次特定异常时都希望执行“某些操作”(例如发送电子邮件)抛出,您可以使用面向方面编程技术。
使用这样的声明性构造,您可以定位某些方法并拦截抛出SQLException的情况,然后执行您的逻辑。
在发送电子邮件的情况下,我会亲自创建一个队列或其他东西,以便在发送电子邮件时不会执行我的主要代码