Connection从池中获取(这可能会引发异常)Statement连接(也可能抛出异常)ResultSet(也可以抛出)中ResultSet(例外!)Statement(例外!)Connection(例外!)看看这段代码:
Connection conn = null;
Statement st = null;
ResultSet set = null;
try {
conn = Database.getConnection();
st = conn.createStatement();
set = st.executeQuery("SELECT * FROM THING");
// <-- Do stuff
} catch (Exception e) {
} finally {
// Close set if possible
if (set != null) {
try {
set.close();
} catch (Exception e) {
}
}
// Close statement if possible
if (st != null) {
try {
st.close();
} catch (Exception e) {
}
}
// Close connection if possible
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
该finally区块是我收我的东西.如你所见,它非常混乱.我的问题是:这是清理这些资源的正确方法吗?
在Java 1.7之前,您的代码是捕获可关闭资源的异常的正确方法,除了您应该捕获SQLException而不是Exception.
从Java 1.7开始,您可以使用"try-with-resources"语句,该语句允许您声明close()在try块完成时自动调用的资源,从而节省样板finally代码.
try (Connection conn = Database.getConnection(); Statement st = conn.createStatement();
ResultSet set = st.executeQuery("SELECT * FROM THING")) {
// Your "try" code as before
}
catch (SQLException e) {
// Handle as before
}
// No "finally" to clean up resources needed!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |