sql >> データベース >  >> RDS >> Mysql

警告SqlExceptionHelper:143-SQLエラー:0、SQLState:08S01- SqlExceptionHelper:144-通信リンク障害

    time_outの値が小さいため、問題が発生していました MySQLサーバー上の変数。

    私の状況では、time_out 1分に設定されました。C3POを使用 JDBCを最適化できるプーリングメカニズム 。

    c3p0をダウンロード -> http://sourceforge.net/projects/c3p0/

    hibernate 3.0を使用しています 。

    hibernate.cfg.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
     
        <session-factory>
           
             <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
              <property name="connection.url">jdbc:mysql://databasehost:3306/databasename</property>
              <property name="connection.username">user</property>
              <property name="connection.password">psw</property>
              <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
              <property name="hibernate.hbm2ddl.auto">update</property>
             
              <property name="show_sql">false</property>
             
           <!-- Hibernate c3p0 settings-->
            <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
            <property name="hibernate.c3p0.acquire_increment">3</property>
            <property name="hibernate.c3p0.idle_test_period">10</property>
            <property name="hibernate.c3p0.min_size">5</property>
            <property name="hibernate.c3p0.max_size">75</property>
            <property name="hibernate.c3p0.max_statements">10</property>
            <property name="hibernate.c3p0.timeout">50</property>
            <property name="hibernate.c3p0.preferredTestQuery">select 1</property>
            <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
              
             <!-- Mapping files -->
            <mapping class="xxx.xxx.xxx.xxx" />
            <mapping class="xxx.xxx.xxx.xxx" />
            <mapping class="xxx.xxx.xxx.xxx" />
            <mapping class="xxx.xxx.xxx.xxx" />
            
           
        </session-factory>
    </hibernate-configuration> 
    

    PersistenceManager.java

    import java.io.PrintStream;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.cfg.Configuration;
    
    public class PersistenceManager
    {
      private static SessionFactory sessionFactory = null;
    
      private static PersistenceManager singleton = null;
    
      public static PersistenceManager getInstance()
      {
        if (singleton == null)
        {
          singleton = new PersistenceManager();
        }
    
        return singleton;
      }
    
      public SessionFactory getSessionFactory()
      {
        if (sessionFactory == null)
          createSessionFactory();
        return sessionFactory;
      }
    
      protected void createSessionFactory()
      {    
        sessionFactory = new AnnotationConfiguration().configure()
          .buildSessionFactory();
      }
    
      public void destroySessionFactory()
      {
        if (sessionFactory != null)
        {
          sessionFactory.close();
          sessionFactory = null;
        }
      }
    }
    

    例1:

    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
    
    public Users Login( String username,  String password)
      {
        Session session = null;
        try
        {
          String hql = "select u from Users u where u.username like :p1 and u.password like :p2";
          session = PersistenceManager.getInstance().getSessionFactory().openSession();
    
          Query q = session.createQuery(hql)
            .setParameter("p1", username)
            .setParameter("p2", password);
    
          if (q.list().size() == 0)
          {
            session.close();
            return new Users();
          }
    
          Users user = (Users)q.list().get(0);
          session.close();
          return user;
        }
        catch (Exception e)
        {
          session.close();
         
        }
      }
    

    例2:

    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
     public String Registration(Users u) { 
    
        Session session = null;
        try
        {
          String hql = "select u from Users u where u.username like :p1";
    
          session = PersistenceManager.getInstance().getSessionFactory().openSession();
    
          Query q = session.createQuery(hql).setParameter("p1", u.getUsername());
    
          if (q.list().size() == 0)
          {
            session.beginTransaction();
            session.persist(u);
            session.getTransaction().commit();
            session.close();
            return new Boolean(true).toString();
          }
    
          session.close();
    
          return new Boolean(false).toString();
        }
        catch (Exception e)
        {
          return e.toString();
        }
      }
    


    1. SQLステートメントですべてのパラメーターが使用されたわけではありません(Python、MySQL)

    2. データベースに保存する前にテキストを圧縮する

    3. カウントにギャップを残してプライマリを自動インクリメント

    4. SQLPlus-PL/SQLブロックから複数のファイルへのスプーリング