嵌套的try块没有catch或finally块

时间:2016-05-13 07:55:17

标签: java try-catch

没有catch或finally块的嵌套try块是否正常,让外部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();
}

2 个答案:

答案 0 :(得分:0)

如果您删除“尝试”'结果集不会自动关闭。

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

最好关闭结果集,打开结果集可能会导致问题:java.sql.SQLException: - ORA-01000: maximum open cursors exceeded

此示例中的异常捕获问题是如何区分数据源异常,查询创建异常或查询执行SQLExceptions?当我的数据源无法提供连接时,我可能会抛出特定的RuntimeException。

答案 1 :(得分: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!
}
相关问题