一尘不染

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

java

看来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。有什么解决办法吗?


阅读 348

收藏
2020-12-03

共1个答案

一尘不染

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

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

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

con.close()
2020-12-03