gpt4 book ai didi

java - 关闭可能抛出异常的资源

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:57 25 4
gpt4 key购买 nike

  • 从池中获取Connection(这可能会抛出异常)
  • 创建连接外的语句(也可能抛出异常)
  • 使用该语句执行 SQL 查询并将其存储在 ResultSet 中(也可以抛出)
  • 处理查询结果
  • 关闭ResultSet(异常!)
  • 关闭语句(异常!)
  • 关闭连接(异常!)

看这段代码:

    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) {

}
}
}

finally block 是我关闭我的东西的地方。如您所见,它非常困惑。我的问题是:这是清理这些资源的正确方法吗?

最佳答案

在 Java 1.7 之前,您的代码是捕获可关闭资源异常的正确方法,除了您应该捕获 SQLException 而不是 Exception

从 Java 1.7 开始,您可以使用 the "try-with-resources" statement ,它允许您声明将在 try block 完成时自动调用 close() 的资源,从而保存样板 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!

关于java - 关闭可能抛出异常的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27236853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com