在ResultSet引用上调用close是否会关闭引用同一ResultSet的另一个引用?

时间:2014-05-05 10:29:59

标签: java servlets jdbc

我有一个Servlet,它使用一个返回ResultSet的静态实用工具方法。

在我的Servlet代码中我有

ResultSet rs = SimpleSearch.searchByName(request);

在我的searchByName方法中,我有以下代码(非完整代码);

try {
            preparedStatement = connection.prepareStatement(str);
            preparedStatement.setDate(1, firstSQLDOB);
            preparedStatement.setDate(2, secondSQLDOB);
            rs = preparedStatement.executeQuery();
            resultSet = rs;

        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            try {
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        return resultSet;

关闭rs是否也会关闭resultSet

3 个答案:

答案 0 :(得分:2)

是的,因为resultSetrs是指向同一对象的两个引用。

我不会正常传递你的结果集,因为你想控制它的闭包(并防止资源泄漏)。我宁愿得到它,迭代并构建一组与其结果相关的对象,关闭结果集并从数据库中交回你生成的对象集合。

答案 1 :(得分:1)

它是相同的ResultSet。你关闭了它:它关闭了。没有关闭对同一对象的单独引用。

答案 2 :(得分:0)

  

关闭rs是否也会关闭resultSet?

是。你是对的。它关闭,因为他们指向相同的参考。