簡體   English   中英

嵌套的try塊沒有catch或finally塊

[英]nested try block without a catch or finally block

沒有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();
}

如果刪除“嘗試”,結果集將不會自動關閉。

try-with-resources語句在最終的隱藏中執行rs.close。

關閉結果集是一個好習慣,打開結果集可能會導致問題: java.sql.SQLException: - ORA-01000:超出最大打開游標數

此示例中的異常捕獲問題是如何區分數據源異常,查詢創建異常或查詢執行SQLExceptions? 當我的數據源無法提供連接時,我可能會拋出特定的RuntimeException。

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!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM