Java 控制Oracle游标
问题:在达到最大值之前,游标的数量一直在增加。 第一个连接被创建此连接从未关闭过()Java 控制Oracle游标,java,oracle,Java,Oracle,问题:在达到最大值之前,游标的数量一直在增加。 第一个连接被创建此连接从未关闭过() Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection(url, schema, password); con.setAutoCommit(true); con.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT); 使用相同的连接,客户端可以 pub
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();
...
此外,在结果集关闭的顺序上。。是否可以在关闭结果集之前关闭语句?
不幸的是,我要到明天才能确认。你觉得怎么样
关闭语句对象时,如果
一个存在,也是封闭的
因此,您应该先关闭结果集
,然后关闭语句
,或者只关闭语句
另外,在
finally
块中关闭ResultSet
和/或语句
。决不能“只关闭语句
”。这会导致不良的编码习惯,在某些情况下是危险的。阅读。@npe您这样说是因为您在statement.close中遇到一些问题吗?对于javadoc所说的安全操作,“您永远不应该”似乎非常苛刻。是的,关闭JBoss上的包装连接通常不关闭语句/结果集。它刚刚将连接释放回池。我现在不知道它是如何工作的,它是在JBoss5.0GA上