0

问题:游标数量一直增加,直到达到最大值。

第一个连接被创建。此连接永远不会关闭()

Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(url, schema, password);

con.setAutoCommit(true);
con.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);

使用相同的连接,客户端可以

public ResultSet runSelect(final StringBuilder query) {

    Statement stmt = null;
    ResultSet rs = null;

    try {
        stmt = con.createStatement();
        rs = stmt.executeQuery(query.toString());
    } catch (SQLException e) {
        logger.error("Failed to execute database query (select):" + query, e);
    }

    return rs;
}

收到结果后,客户端close()将其与语句一起

        if (rs != null) {
            try {
                rs.close();
                ...

这里有什么东西会导致游标数量增加吗?

我在想可能是我错过了关闭 stmt 并且应该是

        if (rs != null) {
            try {
                Statement stmt = rs.getStatement();

                stmt.close();
                rs.close();
                ...

此外,在结果集关闭的顺序上..在关闭结果集之前关闭语句是否可以?

不幸的是,我要到明天才能确认这一点。你怎么看?

4

1 回答 1

1

Statement.close() 的 Javadoc

当 Statement 对象关闭时,其当前的 ResultSet 对象(如果存在)也将关闭。

因此,您应该关闭第ResultSet一个然后Statement关闭 ,或者只关闭Statement.

另外,关闭ResultSet和/或Statement在一个finally块中。

于 2012-06-06T22:27:53.747 回答