此语句中捕获的SQL异常在哪里?

时间:2015-03-04 04:36:44

标签: java

public void xxx() throws SQLException
{
 Statement stmt = connection.createStatement();
 try {
    stmt.executeUpdate("update "+ SYS_TABLE +" set current_day=current_day+ 1 ");
  } finally {
    stmt.close();
 }
}

有一个try和一个finally语句,但中间没有catch。我读错了吗?

4 个答案:

答案 0 :(得分:0)

此处不是catching,而是throws。什么时候SQLException出生的人throws会直接到达上层。

阅读more

答案 1 :(得分:0)

声明方法xxx抛出SQLException。它没有被发布的代码捕获。因为SQLException是一个经过检查的异常,所以它必须在调用者中被捕获(或者调用者不会编译)。

答案 2 :(得分:0)

您没有抓住异常。但抛出SQLException 将异常抛出到方法调用的位置。

如果您在某处调用xxx()方法,那么它将捕获异常。见下文。

public void yyy()
{
   try { 
        xxx(); 
     } 
   catch(SQLException e) {
        System.out.println(e); 
    }
}

希望您能从上面的代码中理解。

答案 3 :(得分:0)

您的代码中未捕获sql异常,try语句仅用于通过Statement子句关闭已打开的finally实例。当executeUpdate行发生异常时,将通过finally子句调用stmt.close(),然后将异常传播给xxx()方法的调用者。这意味着xxx()方法的调用者必须决定是在try .. except ..块中处理异常,还是将其传播给调用者,依此类推。