gpt4 book ai didi

java - 控制 Oracle 游标

转载 作者:行者123 更新时间:2023-12-01 15:21:03 25 4
gpt4 key购买 nike

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

第一个连接已创建。 此连接永远不会被 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com