毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> java技术 >> 正文

ORA-01000:_maximum_open_cursors_exceeded

更新时间:2012-8-22:  来源:毕业论文

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
//类继承了HibernateDaoSupport
private 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 没有及时关闭 
把这个jdbc数据库连接session bean设置成为singleton,就能保证每次访问只有一个cursor了
Spring 默认的bean scope都是singleton的,但是如果您的dao session bean在applicationContext里的配置如果是prototype或其它的就不一样了。

他们在设计的时候、抽取通用方法
ResultSet、Statement都创建了!
然后Statement执行把结果返回给ResultSet、ResultSet呢就是方法的返回值。
在返回的时候、Statement对象没有关闭!
外面的ResultSet到是关闭了!

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。