2016-05-13 10 views
1

Ist es in Ordnung, einen verschachtelten try Block ohne einen Haken zu haben oder schließlich zu blockieren und den äußeren catch Block die Ausnahme behandeln lassen, wenn irgendwelche vom geschachtelten Versuchblock?verschachtelter Versuch Block ohne einen Haken oder schließlich Block

Etwas wie:

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 hier meine Frage bezieht sich nicht, ob es kompiliert oder nicht. es ist sicher kompiliert. Meine Frage ist, ist es in Ordnung, einer Programmierpraxis zu folgen, einen catch-Block für verschachtelten try-Block nicht zu deklarieren. Obwohl mit diesem Ansatz das Programm kompiliert und läuft gut. –

Antwort

0

Wenn Sie die ‚versuchen‘ die Ergebnismenge entfernen wird nicht automatisch geschlossen.

Die try-with-resources-Anweisung sort führt rs.close in einem versteckten finally aus.

Es ist gute Praxis, die resultset, offenes Suchresultates schließen kann zu Problemen führen: java.sql.SQLException: - ORA-01000: maximum open cursors exceeded

Problem mit Ausnahme in diesem Beispiel zu kontrollieren ist, wie Sie zwischen Datenquelle Ausnahmen, der Erstellung der Abfrage Ausnahmen oder Abfrageausführungs SQLExceptions unterscheiden? Ich würde wahrscheinlich eine bestimmte RuntimeException auslösen, wenn meine Datenquelle keine Verbindung liefern kann.

0

No. Your code won't compile.
Jeder try Block (auch verschachtelte) muss mit catch(..) und/oder finally folgen.

Fügen Sie in Ihrem Fall einen zweiten catch-Block hinzu, wenn Sie weitere zusätzliche Ausnahmen behandeln möchten.

Beispielcode:

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

kompiliert es in JDK 7 –