2016-05-13 118 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中編譯得很好 –