2016-05-13 119 views
1

是否有一个嵌套的try块没有catch或finally块,并让外部catch块处理异常,如果有嵌套try块吗?嵌套尝试块没有捕获或最终块

喜欢的东西:

try (Connection con = ds.getConnection(); 
    PreparedStatement ps = con.prepareStatement(sql);) { 

    //nested try block without a catch or finally block 
    try (ResultSet rs = ps.executeQuery();) { 
     while (rs.next()) { 
      list.add(rs.getInt("id")); 
     } 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
+0

@ sr.Varoa这里,我的问题是不相关的是否其编译或没有。它确实编译。我的问题是,遵循一个没有为嵌套try块声明catch块的编程习惯是好的。虽然采用这种方法,程序编译并运行良好。 –

回答

0

如果去掉“尝试”的结果集将不会自动关闭。

try-with-resources语句在隐藏的finally语句中执行rs.close。

这是很好的做法,关闭ResultSet,打开的ResultSet会导致一些问题:java.sql.SQLException: - ORA-01000: maximum open cursors exceeded

问题的例外在这个例子中捕是怎么做的,你的数据源例外,查询创建例外或查询执行的SQLException区分?当我的数据源无法传递连接时,我可能会抛出一个特定的RuntimeException。

0

No. Your code won't compile.
每个try块(甚至嵌套的)必须遵循与catch(..)和/或finally

在你的情况下,如果你想处理任何其他的例外,添加第二个catch块。

示例代码:

try { 
    // code which may throw exceptions 
} catch(Exception e1) { 
    // e1 specific code 
} catch (Exception e2) { 
    // e2 specific code 
} finally { 
    // Optional. Executes whether exception thrown or not! 
} 
+0

它在JDK 7中编译得很好 –