当前位置: 首页 > 面试题库 >

我想返回ResultSet时在哪里关闭JDBC连接

顾永福
2023-03-14
问题内容

看来ResultSet我关闭时会自动关闭Connection。但是我想返回ResultSet并在另一种方法中使用它,所以我不知道在何处关闭Connectionand
PreparedStatement

public ResultSet executeQuery(String sql, String[] getValue)
{
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try
    {
        conn = getConn();
        pstmt = conn.prepareStatement(sql);
        if (getValue != null)
        {
            for (int i = 0; i < getValue.length; i++)
            {
                pstmt.setString(i + 1, getValue[i]);
            }
        }
        rs = pstmt.executeQuery();
    } catch (Exception e)
    {
        e.printStackTrace();
        closeAll(conn, pstmt, rs);
    }
    return rs;
}

closeAll(conn, pstmt, null);进入catch块是因为我发现,如果将它放在finally块中,我将rs在它返回之前立即丢失我的数据。现在当我想关闭时rs,我无法关闭connpstmt。有什么解决办法吗?


问题答案:

使用CachedRowSet用于断开后持有信息

Connection con = ...
ResultSet rs = ...

CachedRowSet rowset = new CachedRowSetImpl();
rowset.populate(rs);

con.close()


 类似资料:
  • 问题内容: 我一直在对我们的一个宠物项目进行代码审查(通常使用诸如FindBugs之类的工具),并且FindBugs将以下代码标记为错误的(伪代码): 错误是此代码可能不会释放资源。我发现ResultSet和Statement没有关闭,所以我最终将它们关闭: 但是我在许多项目(来自许多公司)中遇到了上述模式,没有人关闭ResultSets或Statements。 关闭连接时,是否关闭了Result

  • 问题内容: 我在ResultSet上经历了一段非常糟糕的时光,它在while循环中关闭以迭代此ResultSet。我知道ResultSet关闭的确切行,但是我不知道为什么。 我用注释标记了该行,之后该行关闭了。上面示例中使用的其他方法,构造函数等都经过了正常测试。有谁知道为什么调用第二个方法会关闭第一个方法的线索? 问题答案: 问题在于,每个执行的语句只能维护一组。既然你共享同为你的两个方法,在该

  • 我最近转到了一个项目,在这个项目中我遇到了很多这种性质的代码--(这是使用jdbc postgres驱动程序) 显然,这段代码已经在生产中运行了一段时间,没有引起问题。 为了进一步澄清,如果我的理解是正确的(即,statement和resultset必须在连接关闭之前而不是之后关闭),我需要在catch和finally之间重复一些代码。修订后的代码如下所示。这可以简化吗? 只是为了透视,这段代码是

  • 问题内容: 我应该在哪里关闭与Elasticsearch客户端的连接?我正在使用Spring,并且我不想使用Elasticsearch集成,因为我想学习如何首先完成它。应该只为该应用程序创建一个客户端吗?意味着它将具有单例范围?还是应该具有原型范围并为每次交互关闭连接? 问题答案: 您应该为每个应用程序使用一个客户端,使其成为单例并在应用程序关闭时关闭。

  • 问题内容: 我们看到的情况是,我们的数据库连接由于套接字写入错误而终止: 当然,所有随后的写入连接的尝试都会失败: 在更新代码以捕获此类异常并在发生连接时请求新连接后,该连接再次失败。我是否怀疑每次调用实际上都不在提供新的连接?难道不只是重用已关闭的现有连接吗? 如果我是正确的,那么丢弃旧的连接并请求新的连接的正确方法是什么? 编辑:这是我想知道的更简洁的版本: “ c1 == c2”是正确的说法

  • 嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到