如何处理finally块中发生的异常

时间:2012-10-05 06:28:10

标签: java exception-handling

在以下代码段中,

    try
    { 
      Statement stmt = conect.getConnection();
      stmt.executeUpdate(query);
    }
    catch(SQLException e)
    { 
      //handle exception
    }
    finally
    {
      try{ stmt.close(); } 
      catch(SQLException ignore){}
    }

执行stmt.close();时finally块中发生异常时会发生什么? 有没有更好的方法来处理这类问题?

4 个答案:

答案 0 :(得分:3)

有时连接因为某些异常而未打开,但最终阻止关闭该连接。要避免此异常,请查看以下代码。

    try{ 
      Statement stmt = conect.getConnection();
      stmt.executeUpdate(query);
    }catch(SQLException e){ 
      //handle exception
    }finally{
      try{ 
       if(stmt != null){
         stmt.close(); 
       }
    } 
      catch(SQLException ignore){}
    }

答案 1 :(得分:1)

   finally 
    {
          if( stmt != null ) {
            try {
              stmt.close();
            }
            catch(SQLException ex ) {
              ex.printStackTrace();
            }
          }
    }

答案 2 :(得分:1)

可能出现的问题是语句未关闭,然后在尝试重用时会出错。

尝试:

Statement stmt = null;
try {
        stmt = conect.getConnection();
        stmt.executeUpdate(query);
    }    
 catch(SQLException e) {       
          //handle exception  
   }    
 finally   
  {     
     try{ if(stmt!=null)stmt.close(); }    
     catch(SQLException ignore){}  
   }

答案 3 :(得分:0)

通常当发生异常时,我们将其包装在用户定义的异常上并抛出。

类似地,当最终也发生异常时,你需要抛出你自己的异常。

试     {

  Statement stmt = conect.getConnection();
  stmt.executeUpdate(query);
}
catch(SQLException e)
{ 
  //handle exception 
   throw MyOwnException(e,"My message");
}
finally
{
  try{ stmt.close(); } 
  catch(SQLException ignore)
  {
      throw MyOwnException(ignore,"My message");
  }
}