控制Oracle游标

时间:2012-06-06 21:49:48

标签: java oracle

问题:游标数量达到最大值。

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

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();
                ...

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

不幸的是我直到明天才能证实这一点。你觉得怎么样?

1 个答案:

答案 0 :(得分:1)

Javadoc for Statement.close()

  

当Statement对象关闭时,它的当前ResultSet对象如果   一个存在,也关闭。

因此,您应首先关闭ResultSet,然后关闭Statement,或仅关闭Statement

另外,关闭ResultSet区块中的Statement和/或finally