【问题标题】:How can I call my custom exception when an SQLException occurs?发生 SQLException 时如何调用自定义异常?
【发布时间】:2014-03-12 10:03:32
【问题描述】:

假设我有以下几行代码,

       Class.forName(JDBC_DRIVER);
       dbConnection = DriverManager.getConnection(DB_URL, USER, PASS);

现在我想要的是,当捕获到 SQLException 时,我想从 SQLException 的 catch 字段中抛出我的自定义异常,我的意思是可以这样做还是有其他方法可以这样做?

我的自定义异常是 ErrorToDisplayException 为:

    public class ErrorToDisplayException extends Exception{

public ErrorToDisplayException(Throwable e) {
}
    }

我的代码如下:

   try {        
    //Register JDBC driver
       Class.forName(JDBC_DRIVER);
       dbConnection = DriverManager.getConnection(DB_URL, USER, PASS);
   }catch(final SQLException se){
    // Handle errors for JDBC
       throw new ErrorToDisplayException(se);
   }

现在发生的情况是,当编译器到达 }catch(final SQLException se){ 它没有去它的捕捉体,只是挣脱了,不知道为什么?

【问题讨论】:

  • 是的,我已经这样做了,但是发生的是当 SQLException 发生时(在 DEBUG 模式下),它会捕获异常并直接脱离代码而不是执行其捕获字段!,不知道为什么会这样!
  • 这是一种奇怪的行为。你能用你观察到的代码的 sn-p 编辑你的原始帖子吗?也许是一些未经检查的异常从你的 catch() 中滑出
  • 您能否也发布 JDBC_DRIVER 的值?你确定这个类在你的类路径中是可以访问的吗?
  • @Jorge_B JDBC_DRIVER = "com.mysql.jdbc.Driver" ,是的,我确定类路径没有问题!
  • 那么我的最后一个想法是在代码末尾添加catch(Throwable t) { t.printStackTrace(); } 之类的内容,以便用尽所有可能引发检查异常的选项

标签: java jdbc exception-handling sqlexception throws


【解决方案1】:

你的意思是这样的还是我不明白?!

try {
    Class.forName(JDBC_DRIVER);
    dbConnection = DriverManager.getConnection(DB_URL, USER, PASS);
} catch (SQLException e) {
    throw new MyException(e);
}

或者你的意思是在所有地方用自己的类型替换一些标准异常?

【讨论】:

  • 是的,我一开始也是这样做的,但是我面临的问题是当编译器进入行时,“} catch (SQLException e) {”,然后它不会去它的领域,只是挣脱,不知道为什么!
  • 那么你可能在 catch 块中根本没有任何异常。你确定上面提到的代码块中真的抛出了SQLException吗?
  • 现在请看我编辑的代码,希望你现在有一个想法!
  • 阿米尔,您可以尝试为您的数据库设置错误的用户/密码并重新运行您的代码吗?执行 catch 块是否有帮助?
  • 是的,非常感谢,在插入错误的用户名后它可以工作。但我想要的是当用户名/密码正确但数据库关闭或不存在时它应该可以工作!
【解决方案2】:

第一:

class MyCustomException extends Exception {
    public MyCustomException(Throwable e) {
    }
}

然后:

try {
    Class.forName(JDBC_DRIVER);
    dbConnection = DriverManager.getConnection(DB_URL, USER, PASS);
} catch (SQLException e) {
    throw new MyCustomException(e);
}

【讨论】:

  • 是的,我就是这样做的,但是编译器没有进入 SQLException 的 catch 字段!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多