首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java.sql.SQLException: ORA-01000: maximum open cursors exceeded,该如何处理

2012-09-10 
java.sql.SQLException: ORA-01000: maximum open cursors exceeded帖子内容有点长、大侠们耐心点看:系统用

java.sql.SQLException: ORA-01000: maximum open cursors exceeded
帖子内容有点长、大侠们耐心点看:
系统用的SSH框架、有时候前台点击跟数据库交互就会报超出最大游标数的错误。
我不知道什么问题、下面把配置跟部分代码贴出来、大侠指正。
数据源:

XML code
<Resource                    name="jdbc/customermanage"                    auth="Container"                    type="javax.sql.DataSource"                    maxActive="100"                    maxIdle="30"                    maxWait="10000"                    username="......"                    password="......"                     driverClassName="oracle.jdbc.OracleDriver"                    url=".................."/>

Spring配置:
XML code
<aop:config>        <aop:pointcut id="logger" expression="execution(* com.chinaboxun.*.*.service.*(..))" />        <aop:aspect id="loggerAspect" ref="genericLogger">               <aop:around pointcut-ref="logger" method="invoke" />           </aop:aspect>      </aop:config><bean id="TransactionProxyFactory" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">        <property name="transactionManager" ref="TransactionManager"/>        <property name="transactionAttributes">            <props>                <prop key="add*">PROPAGATION_REQUIRED</prop>                <prop key="save*">PROPAGATION_REQUIRED</prop>                <prop key="update*">PROPAGATION_REQUIRED</prop>                <prop key="del*">PROPAGATION_REQUIRED</prop>                <prop key="run">PROPAGATION_REQUIRED</prop>                <prop key="send*">PROPAGATION_REQUIRED</prop>                <prop key="doInit*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="edit*">PROPAGATION_REQUIRED</prop>            </props>        </property>    </bean>

事务处理呢、是木有问题的。
在Action调用Service的方法(不处理异常信息):
Java code
Object[] objs =customerManage.selectBymanage(......);//......

Service呢调用dao层方法(try了一下异常信息、但是dao层方法并不将异常抛出来):
Java code
numbers = hqlDao.find(sqlCount.toString(), params);//......

dao层方法:
Java code
//类继承了HibernateDaoSupportprivate Session session = null;public List<T> find(String hql, List<T> params, int pageRows, int pageIndex){        // TODO Auto-generated method stub        List result = null;        if (null != hql && !"".equals(hql.trim())){            try {                session = this.getSession();                Query query = session.createQuery(hql);                if (null != params) {                    for(int i = 0; i < params.size(); i++) {                        query.setParameter(i, params.get(i));                    }                }                if (pageRows > 0 && pageIndex > 0) {                    query.setMaxResults(pageRows);                    query.setFirstResult(pageRows * (pageIndex - 1));                }                result = query.list();            } catch (Exception ex) {                ex.printStackTrace();            }        }        return result;    } 



疑问:
1、session会自动关闭么???
2、为什么会报这个异常呢:
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
求解决方案......

[解决办法]
1,不会
2,ResultSet 或者 Statement 没有及时关闭
[解决办法]
探讨

好吧、我错了、我承认、我真的错了!
我以为是我没有配置select为前缀的方法的事务、但是我发现我将方法改成find过后!
还是出这个错误。
Java code

java.sql.SQLException: ORA-01000: maximum open cursors exceeded



我该怎么办呢!!!
难道要手动关闭session?
或者改用JBDC?

[解决办法]
能不能贴出来dao session bean的配置? applicationContext里面的?
[解决办法]
这两个你自己写的?
hqlDao.listCount和 find

有代码吗?
[解决办法]
定时运行JVM回收内存

热点排行