问题:游标数量达到最大值。
创建第一个连接。 此连接永远不会关闭()
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();
...
此外,按结果集关闭的顺序..可以在关闭结果集之前关闭语句吗?
不幸的是我直到明天才能证实这一点。你觉得怎么样?
答案 0 :(得分:1)
Javadoc for Statement.close():
当Statement对象关闭时,它的当前ResultSet对象如果 一个存在,也关闭。
因此,您应首先关闭ResultSet
,然后关闭Statement
,或仅关闭Statement
。
另外,关闭ResultSet
区块中的Statement
和/或finally
。