本帖最后由 cklxh520 于 2010-10-25 20:30:01 编辑

解决方案 »

  1.   

    使用hibernate的时候 直接获取session  hibernate帮你管理的就是连接 你在这里使用了hibernate还获取连接没什么意义吧
      

  2.   

    是因为程序是以前的程序,写的不规范。。用了hibernate和JDBC,hibernate的缓存会引起问题,现在就用用hibernate去得到连接来执行sql。所以才搞的这么一出。
      

  3.   

    你配置了sessionFactory 配对了的话 就这样写呀Session session = this.getSession();
    Connection con = session.connection();
    PreparedStatement ps = con.prepareStatement(select * from sys_area order by areaid);//预处理
    ps.execute();//执行操作
      

  4.   

    sessionFactory 是这样的,其它地方都正常。
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
    <description>sessionFactory</description> <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="mappingResources">
    <list>
    ... <value>hibernatecfg/org_broadcastschedule.hbm.xml</value>
                            ...
    </list>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    </bean>
    </beans>还有一点:异常前有一个
    WARN ConnectionManager:376 - unclosed connection, forgot to call close() on your session?
    警告,说我session没关,我郁闷了。。数据都没查询完就异常了,还说我没关session。
      

  5.   

    Dao类:DataSourceImp.java
    package net.segns.dataSource;import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class DataSourceImp extends HibernateDaoSupport implements DataSource  {


    public Connection getConnection()
    {
    Connection conn=this.getSession().connection();
    int c=0;
         try {
        
         PreparedStatement ps=conn.prepareStatement("select * from sys_area order by areaid");
         ResultSet rs=ps.executeQuery();
         while( rs.next())
         c++;
         rs.close();
         ps.close();
         conn.close();
         } catch (Exception e) {
         System.out.println("有:"+c);
         e.printStackTrace();
         }
    return conn;
    }}Spring配置:sessionfactory.xml<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
    <description>sessionFactory</description> <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="mappingResources">
    <list>
    <value>hibernatecfg/org_broadcastschedule.hbm.xml</value>
    </list>
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    </bean>
    </beans>Spring配置:DataSource.xml <bean id="DataSourceDAO"
    class="net.segns.dataSource.DataSourceImp" >
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    测试方法:public static void main(String[] args) {
        
         try {
         DataSource ds=(DataSource)SpringApplicationContextFactory
                .getService("DataSourceDAO");
           
               ds.eee();
        
         } catch (Exception e) {
        
         e.printStackTrace();
         }
        
        }
    异常打印:有:1930
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.validateClosedState(Unknown Source)
    at com.microsoft.jdbc.base.BaseResultSet.validateClosedState(Unknown Source)
    at com.microsoft.jdbc.base.BaseResultSet.commonFetchInitialize(Unknown Source)
    at com.microsoft.jdbc.base.BaseResultSet.next(Unknown Source)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:196)
    at net.segns.dataSource.DataSourceImp.eee(DataSourceImp.java:21)
    at net.segns.common.util.db.SQLHandle.main(SQLHandle.java:304)
      

  6.   

    上面Dao类DataSourceImp .java有一个方法名贴错了,下面这个才是正确的。package net.segns.dataSource;import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class DataSourceImp extends HibernateDaoSupport implements DataSource  {


    public void eee()
    {
    Connection conn=this.getSession().connection();
    int c=0;
         try {
        
         PreparedStatement ps=conn.prepareStatement("select * from sys_area order by areaid");
         ResultSet rs=ps.executeQuery();
         while( rs.next())
         c++;
         rs.close();
         ps.close();
         conn.close();
         } catch (Exception e) {
         System.out.println("有:"+c);
         e.printStackTrace();
         }

    }}