Java 如何在JDBC中使用try-with-resources?

我有一种使用JDBC从数据库中获取用户的方法:

public List<User> getUser(int userId) {

String sql = "SELECT id, name FROM users WHERE id = ?";

List<User> users = new ArrayList<User>();

try {

Connection con = DriverManager.getConnection(myConnectionURL);

PreparedStatement ps = con.prepareStatement(sql);

ps.setInt(1, userId);

ResultSet rs = ps.executeQuery();

while(rs.next()) {

users.add(new User(rs.getInt("id"), rs.getString("name")));

}

rs.close();

ps.close();

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

return users;

}

我应该如何使用Java 7 try-with-resources来改进此代码?

我已经尝试使用下面的代码,但是它使用了很多try块,并且并没有太大地提高可读性。我应该try-with-resources以其他方式使用吗?

public List<User> getUser(int userId) {

String sql = "SELECT id, name FROM users WHERE id = ?";

List<User> users = new ArrayList<>();

try {

try (Connection con = DriverManager.getConnection(myConnectionURL);

PreparedStatement ps = con.prepareStatement(sql);) {

ps.setInt(1, userId);

try (ResultSet rs = ps.executeQuery();) {

while(rs.next()) {

users.add(new User(rs.getInt("id"), rs.getString("name")));

}

}

}

} catch (SQLException e) {

e.printStackTrace();

}

return users;

}

回答:

在你的示例中,无需进行外部尝试,因此你至少可以从3降为2,并​​且也不需要;在资源列表的末尾关闭。使用两个try块的优点是所有代码都在前面显示,因此你不必引用单独的方法:

public List<User> getUser(int userId) {

String sql = "SELECT id, username FROM users WHERE id = ?";

List<User> users = new ArrayList<>();

try (Connection con = DriverManager.getConnection(myConnectionURL);

PreparedStatement ps = con.prepareStatement(sql)) {

ps.setInt(1, userId);

try (ResultSet rs = ps.executeQuery()) {

while(rs.next()) {

users.add(new User(rs.getInt("id"), rs.getString("name")));

}

}

} catch (SQLException e) {

e.printStackTrace();

}

return users;

}

以上是 Java 如何在JDBC中使用try-with-resources? 的全部内容, 来源链接: utcz.com/qa/427357.html

回到顶部