用到了ssh框架,由于有sql文检索,所以也用到了DBconnection.java,配置hibernate用hibernate.cfg.xml
大侠帮解释一下为什么这样,谢谢org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1596)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:890)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at org.springframework.orm.hibernate3.HibernateTemplate$29.doInHibernate(HibernateTemplate.java:839)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:830)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:826)
at com.epro.struts.dao.WcmdocumentsaleDAO.findByProperty(WcmdocumentsaleDAO.java:96)
at com.epro.struts.dao.WcmdocumentsaleDAO.findBySessionid(WcmdocumentsaleDAO.java:104)
at com.epro.struts.action.BuyBookAction.addBook(BuyBookAction.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at com.epro.struts.action.BaseAction.execute(BaseAction.java:43)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.epro.struts.EncodingFilter.doFilter(EncodingFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:363)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:924)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1114)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:959)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1234)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3459)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1272)
at org.hibernate.loader.Loader.doQuery(Loader.java:391)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
... 39 more

解决方案 »

  1.   

    应该不是连接的问题,是SQL的问题吧?
      

  2.   

    "GenericJDBCException: could not execute query "
    应该是sql语句的问题。
      

  3.   

    hibernate.cfg.xml文件内容<session-factory>
    <property name="dialect">
    org.hibernate.dialect.OracleDialect
    </property>
    <property name="connection.url">jdbc:oracle:thin:@10.74.8.203:1521:ora10g</property>
    <!-- jdbc:oracle:thin:@60.190.57.124:1521:ora10g
    jdbc:oracle:thin:@localhost:1521:orcl
    jdbc:oracle:thin:@10.74.8.203:1521:ora10g -->
    <property name="connection.username">TRSWCM</property>
    <property name="connection.password">TRSWCM</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="show_sql">false</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
    <!-- <property name="myeclipse.connection.profile">
    booksale
    </property>
    <property name="connection.characterEncoding">UTF-8</property>
    <property name="connection.useUnicode">true</property> -->

    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <!-- 最大连接数 -->
       <property name="c3p0.max_size">100</property> 
       <!-- 最小连接数 -->
       <property name="c3p0.min_size">30</property> 
       <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
       <property name="c3p0.timeout">5000</property> 
       <!-- 最大的PreparedStatement的数量 -->
       <property name="c3p0.max_statements">100</property> 
       <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
       <property name="c3p0.idle_test_period">3000</property> 
       <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
       <property name="c3p0.acquire_increment">2</property> 
       <!-- 每次都验证连接是否可用 -->
       <property name="c3p0.validate">false</property> 

    <mapping resource="com/epro/struts/dao/Wcmdocument.hbm.xml" />
    <mapping resource="com/epro/struts/dao/Wcmdocumentsale.hbm.xml" />
    <mapping resource="com/epro/struts/dao/Wcmdocumentdetail.hbm.xml" />
    </session-factory>DBconnection.java文件内容
    public static Connection getConnection(){
            // 声明Connection连接对象
            Connection conn = null;
            try{
                // 使用Class.forName()方法自动创建这个驱动程序的实例且自动调用DriverManager来注册它
                Class.forName("oracle.jdbc.driver.OracleDriver");
                // 通过DriverManager的getConnection()方法获取数据库连接
             conn = DriverManager.getConnection("jdbc:oracle:thin:@10.74.8.203:1521:ora10g", "TRSWCM", "TRSWCM");
            
            
                //DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
                //conn = DriverManager.getConnection("jdbc:oracle:thin:@10.74.8.203:1521:ora10g", "TRSWCM", "TRSWCM");
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return conn;
        }
      

  4.   

    Caused by: org.hibernate.exception.GenericJDBCException: could not execute query 
      

  5.   

    我想问一下,我连接的时候用下面的方法,有问题吗?public List findAllBookList(){
    List list = new ArrayList();
    Connection con = null;
    Statement stmt = null;
    try {
    con = DBConnection.getConnection();
    stmt = con.createStatement();
    // 关闭自动提交
    con.setAutoCommit(false);
    // 拼写的SQL语句
    StringBuffer str = new StringBuffer();
    str.append(" select * from wcmdocument where docchannel in (select channelid from wcmchannel where parentid='236') order by doctitle");
    ResultSet rs = stmt.executeQuery(str.toString());
    if(rs != null){
    while(rs.next()){
    Wcmdocument doc = new Wcmdocument();
    doc.setDocid(Long.valueOf(rs.getString("docid")));
    doc.setDoctitle(rs.getString("doctitle"));
    list.add(doc);
    }
    }
    // 事务提交
    //con.commit();
    rs.close();
    stmt.close();
    con.close();
    } catch (Exception e){
    e.printStackTrace();
    try {
    // 操作不成功则回滚
    //con.rollback();
    stmt.close();
    con.close();
    } catch (Exception ex) {
    System.out.println("rollback fail");
    }
    }
    return list;
    }
      

  6.   

    应该没有问题的,你既然用了Hibernate,怎么还用这样的连接呀
      

  7.   

    sql应该没有问题,直接放到sqlplus里都能执行
      

  8.   

    用 hibernate我不知道怎么写sql文啊,单表的还好,多表的还是sql方便啊,呵呵,hibernate还是不熟啊
      

  9.   

    就是那个hql我也不知道怎么写,貌似写起来还挺麻烦的,
    关键是,这两种连接都存在会有什么不妥吗?
      

  10.   

    不会的,可以通Hibernate的session得到连接
      

  11.   

    原来Oracle的安全性也就那样 嘿嘿  用户自己曝光  看Oracle怎么保证数据库安全 嘿嘿
      

  12.   

    别担心,都是内网的,你连不上
    您的意思是说没必要用那个DBconnection.java是吗?用hibernate的session取得连接!