看来ResultSet我关闭时会自动关闭Connection。但是我想返回ResultSet并在另一种方法中使用它,所以我不知道在何处关闭Connectionand PreparedStatement。
ResultSet
Connection
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,我无法关闭conn和pstmt。有什么解决办法吗?
closeAll(conn, pstmt, null);
rs
conn
pstmt
使用CachedRowSet用于断开后持有信息
CachedRowSet
Connection con = ... ResultSet rs = ... CachedRowSet rowset = new CachedRowSetImpl(); rowset.populate(rs); con.close()