首页 > 解决方案 > 对没有任何参考的资源使用“尝试资源”

问题描述

考虑以下情况:

try (ResultSet resultSet = DriverManager.getConnection("jdbc:...", "user", "pass")
                                      .createStatement().executeQuery(sql)) {    
                    .
                    .
                    .
}

这是在资源中创建了三个资源的情况try: a Connection、 aStatement和 a ResultSet

try 块结束后这三个资源会发生什么?他们是否都会被关闭,即使他们没有提及他们,还是只会resultSet被关闭?

在尝试使用资源块时声明AutoCloseable资源而不引用它们是否安全?

标签: javatry-with-resourcesautocloseable

解决方案


只有ResultSet将被关闭。如果要关闭多个资源,需要分别声明:

try (Connection conn  = DriverManager.getConnection("jdbc:...", "user", "pass");
     Statement stmt = conn.createStatement();
     ResultSet resultSet = stmt.executeQuery(sql)) {    

     // do stuff...
}

推荐阅读