对于由Statement、PreparedStatement而导致的‘显式’游标无法关闭问题是可以控制和解决的,使用一个类来提供OpenQuery,RunSQL等数据库一般操作的方法,在使用时要额外小心显式的关闭Statement,并且对于每个功能可以配合“select sid, sql_text, count(*) from sys.v_$open_cursor group by sid, sql_text”来查看是否存在有游标未关闭的情况(即Statement未关闭)。目前我是这样解决的,好像比较累:(
但是我碰到由于使用CallableStatement调用Oracle的Procedure而导致Procedure中的游标无法关闭,使用“select sid, sql_text, count(*) from sys.v_$open_cursor group by sid, sql_text”发现每执行一次就新增若干个游标,但是在源码方面已经将CallableStatement给Close了。由于使用了ConnetionPool,对于Connection不方便显式的Close,那么是否在Oracle服务器端可以配置释放Procedure中打开的游标呢?还是在JDBC中可以控制?