Dev*_*Dio 5 java datasource try-with-resources
是否必须将内部try-with-resources或其中一个try-with-resources中的所有内容自动关闭?
try (BasicDataSource ds = BasicDataSourceFactory.createDataSource(dsProperties)) {
// still necessary for Connection to close if inside
// try-with-resources?
try (Connection conn = ds.getConnection()) {
String sql = "SELECT * FROM users";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("email"));
System.out.println(rs.getString("password"));
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
在一个try-与资源块,仅在资源try声明将自动关闭以试戴与资源结构.块内的其他资源是不相关的,必须进行管理(*).
但是,您可以在try语句中放置多个资源,而不是使用多个try-with-resources(每个资源一个),例如:
try (PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("email"));
System.out.println(rs.getString("password"));
}
}
Run Code Online (Sandbox Code Playgroud)
(*)正如@ alexander-farber在评论中指出的那样,还有一些资源会被其他机制自动关闭,例如ResultSet当Statement生成它时它会被关闭.虽然您没有明确地管理这些资源,但它们是由它们的实现来管理的.