HQL 为
 FROM PunishNotice WHERE billState <>'删除'  ORDER BY  CODENUMBER desc具体异常信息[QC] ERROR [http-bio-8080-exec-7] org.slf4j.impl.JCLLoggerAdapter.error(454) | 未执行语句句柄
 org.apache.jasper.JasperException:根据HQL语句[FROM PunishNotice WHERE billState <>'删除'  ORDER BY  CODENUMBER desc]查询对象时出错Caused by: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select punishnoti0_.innerId as innerId121_, punishnoti0_.classId as classId121_, punishnoti0_.codeNumber as codeNumber121_, punishnoti0_.fillDate as fillDate121_, punishnoti0_.punishedNotice as punished5_121_, punishnoti0_.isPublish as isPublish121_, punishnoti0_.billState as billState121_, punishnoti0_.workFlowStatus as workFlow8_121_, punishnoti0_.fillerDeptId as fillerDe9_121_, punishnoti0_.fillerDeptClassId as fillerD10_121_, punishnoti0_.fillerId as fillerId121_, punishnoti0_.fillerClassId as fillerC12_121_, punishnoti0_.punishedCodeId as punishe13_121_, punishnoti0_.punishedCodeClassId as punishe14_121_ from PunishNotice punishnoti0_ where punishnoti0_.billState<>'删除' order by CODENUMBER desc]; SQL state [null]; error code [17144]; 未执行语句句柄; nested exception is java.sql.SQLException: 未执行语句句柄
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)

... 49 more
Caused by: java.sql.SQLException: 未执行语句句柄
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:733)
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3285)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1914)
at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2267)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1423)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1351)
at org.hibernate.loader.Loader.getRow(Loader.java:1251)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:619)
at org.hibernate.loader.Loader.doQuery(Loader.java:745)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2294)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172)
at org.hibernate.loader.Loader.list(Loader.java:2167)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:448)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 52 more上面HQL最后解析成的sql语句在  数据库中是可执行且有数据查询出来的.网上也找了很多关于未执行语句句柄的错误定位  但是都不能解决.大概的症状是  相比其他表单 执行的时间过长 (里面小于10条数据  字段也不是很多.)
程序未执行存储过程及操作游标找了好几天,实在定位不到原因的根源, 希望各位帮忙看看  分析下大体情况oracle11g数据库另外oracle有没有软件 能像navicate for mysql那样能查看oracle当前的执行sql和进程个人总感觉是数据库方面的问题.但是实在定位不到.oracle异常

解决方案 »

  1.   

    java.sql.SQLException: 未执行语句句柄这种错误一般都是连接关闭,或者执行时间过长引起的。
      

  2.   


    org.hibernate.dialect.Oracle10gDialect
      

  3.   


    被底层封装着  反编译之后是这样public List findForPage(String hql, int firstResult, int maxResults, Object[] values)
        throws DataAccessException
      {
        return (List)executeWithNativeSession(new HibernateCallback(hql, firstResult, maxResults, values)
        {
          public List doInHibernate(Session session) throws HibernateException {
            Query queryObject = session.createQuery(this.val$hql);
            AdpHibernateTemplate.this.prepareQuery(queryObject);
            if (this.val$firstResult >= 0) {
              queryObject.setFirstResult(this.val$firstResult);
            }
            if (this.val$maxResults > 0) {
              queryObject.setMaxResults(this.val$maxResults);
            }
            if (this.val$values != null) {
              for (int i = 0; i < this.val$values.length; i++) {
                queryObject.setParameter(i, this.val$values[i]);
              }
            }
            return queryObject.list();
          }
        });
      }
      

  4.   


    被底层封装着  反编译之后是这样public List findForPage(String hql, int firstResult, int maxResults, Object[] values)
        throws DataAccessException
      {
        return (List)executeWithNativeSession(new HibernateCallback(hql, firstResult, maxResults, values)
        {
          public List doInHibernate(Session session) throws HibernateException {
            Query queryObject = session.createQuery(this.val$hql);
            AdpHibernateTemplate.this.prepareQuery(queryObject);
            if (this.val$firstResult >= 0) {
              queryObject.setFirstResult(this.val$firstResult);
            }
            if (this.val$maxResults > 0) {
              queryObject.setMaxResults(this.val$maxResults);
            }
            if (this.val$values != null) {
              for (int i = 0; i < this.val$values.length; i++) {
                queryObject.setParameter(i, this.val$values[i]);
              }
            }
            return queryObject.list();
          }
        });
      }这个方法自己已经有事务支持了,你整个项目是不是又配置事务管理了?可以自己用原生态语句走一遍这个查询语句,看看效果如何。
      

  5.   


    被底层封装着  反编译之后是这样public List findForPage(String hql, int firstResult, int maxResults, Object[] values)
        throws DataAccessException
      {
        return (List)executeWithNativeSession(new HibernateCallback(hql, firstResult, maxResults, values)
        {
          public List doInHibernate(Session session) throws HibernateException {
            Query queryObject = session.createQuery(this.val$hql);
            AdpHibernateTemplate.this.prepareQuery(queryObject);
            if (this.val$firstResult >= 0) {
              queryObject.setFirstResult(this.val$firstResult);
            }
            if (this.val$maxResults > 0) {
              queryObject.setMaxResults(this.val$maxResults);
            }
            if (this.val$values != null) {
              for (int i = 0; i < this.val$values.length; i++) {
                queryObject.setParameter(i, this.val$values[i]);
              }
            }
            return queryObject.list();
          }
        });
      }这个方法自己已经有事务支持了,你整个项目是不是又配置事务管理了?可以自己用原生态语句走一遍这个查询语句,看看效果如何。说到事务 ,我想起我们项目和其他公司的项目集成里配置文件我看他的事务支持全部都是 <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
            <property name="transactionManager" ref="transactionManager" />  
            <!-- 配置事务属性 -->  
            <property name="transactionAttributes">  
                <props>  
                    <prop key="*">PROPAGATION_REQUIRED</prop>  
                </props>  
            </property>  
        </bean>拦截全部都是REQUIRED   我试试看是事务的方面不
      

  6.   


    org.hibernate.dialect.Oracle10gDialect
    测试过你的dataSource吗?
      

  7.   


    org.hibernate.dialect.Oracle10gDialect
    测试过你的dataSource吗?其他表单正常 使用的同样底层代码 2天前这个功能原来好使的
      

  8.   

    仅仅提供软件,像navicate for mysql的软件有,叫PLSQL Developer,记得给分,,,
      

  9.   


    org.hibernate.dialect.Oracle10gDialect
    测试过你的dataSource吗?其他表单正常 使用的同样底层代码 2天前这个功能原来好使的
    那这样的话,就要看下你的sql?如果sql没有问题就看下返回的数据是不是有null
      

  10.   


    org.hibernate.dialect.Oracle10gDialect
    测试过你的dataSource吗?其他表单正常 使用的同样底层代码 2天前这个功能原来好使的
    --这个问题主要出现在使用数据库游标的时候.当执行存储过程,返回的游标没有打开时,可能会报这个错。
    --游标没有打开的情况一般是忘记了写打开游标的语句,也可能是存储过程中执行出错,导致最后游标未打开。
      

  11.   

    未执行语句句柄 应该是关闭的连接造成
    很有可能是执行时间长导致数据量有多大??数据量大的情况下 WHERE billState <>'删除'  比较损耗性能的
      

  12.   

    另外 ORDER BY   也会造成性能开销LZ 我看了下 数据量貌似不大 是否可以打印下耗时看看 以及连接的状态看看
      

  13.   

    纯SQL 执行可以通过吗  需要多久?
      

  14.   

    未执行语句句柄看了下:
    SQLException - if a database access error occurs or this method is called on a closed PreparedStatement 1.数据库访问错误
    2.PreparedStatement关闭
    仔细检查数据库操作开启链接关闭相关代码。
      

  15.   

    已经解决了,是事务的问题.
    其他项目的事务spring配置文件影响到的.我荒废了那么多天原来在其他项目给影响到的.我该不该骂他们.我差点就被老大骂死谢谢各位 散分