java - 控制 Oracle 游标

标签 java oracle

问题:光标数量不断增加,直到达到最大值。

第一个连接已创建。 此连接永远不会被 close()ed

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

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

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

最佳答案

Javadoc for Statement.close() :

When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

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

此外,关闭 finally block 中的 ResultSet 和/或 Statement

关于java - 控制 Oracle 游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922807/

相关文章:

java - 如何确定黑莓手机上按下的是哪个键

oracle - 哪个 Oracle 11g 有 DBCA?

mysql - Oracle 数据库 - 链接到 Mac 上的 MySql?

java - 在容器外部定义 jta 数据源

java - HTML::Anyway 到 'split' body 标签?

java - 公式计算不正确

php - 具有多个表的oracle php回滚

java - 使用 oracle 和 mysql 在数据库上进行多线程

java - Tomcat如何识别不同的连接器?

java - 在 Hibernate 中映射两个表 0..n