问题:光标数量不断增加,直到达到最大值。
第一个连接已创建。 此连接永远不会被 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/