tttt

import   javax.sql.DataSource;  
  import   java.sql.Connection;  
  import   java.sql.CallableStatement;  
  import   java.sql.SQLException;  
  import   java.sql.Statement;  
  import   java.sql.PreparedStatement;  
  import   java.sql.ResultSet;  
  import   org.apache.log4j.Logger;  
  import   java.sql.DriverManager;  
  /**  
    *   本类是数据库连接的管理类,因此在整个系统中没有必要出现多个,一个就够用了  
    *   因此,决定在此类上使用单态设计模式,只提供本类的一个实例出去。  
    *   在此我是用单态的饿汉模式(单态模式分为:饿汉,懒汉--在实例化类的时候创建对象,  
    *   需要考虑线程同步)进行使用,  
    */  
  public   class   DBConnectionManager   {  
      private   static   Logger   logger=Logger.getLogger(DBConnectionManager.class.getName());  
      /**  
        *   本静态变量用来存放本系统启动时由Struts生成的连接池的数据源  
        */  
      private   static   DataSource   datasource;  
      /**  
        *   由于本类使用单态设计模式,因此不允许在使用中通过New进行实例化,那么本类就要提供一个  
        *   此类的实例供外界使用,这就是供外界使用的实例  
        */  
      private   static   DBConnectionManager   dbConManager=new   DBConnectionManager();  
      private   DBConnectionManager(){}  
      /**  
        *   此静态方法用来向类的静态变量赋值,用来在系统中使用  
        *   @param   mydatasource   传入的struts生成的数据源  
        */  
      public   static   void   setDatasource(DataSource   mydatasource)   {  
          logger.info("设置数据源");  
          if(datasource==null){  
              datasource   =   mydatasource;  
          }  
      }  
      /**  
        *   由于本类使用单态模式,不允许其他的类使用New进行创建实例  
        *   因此在这里提供一个共有的静态方法来向外界提供自己的一个实例。  
        *   @return   返回本类的唯一实例  
        */  
      public   static   DBConnectionManager   getInstance()   {  
          logger.info("获得数据库连接管理类的实例");  
          return   dbConManager;  
      }  
      /**  
        *   此方法提供一个可用的数据库连接,从连接池中取得可用连接  
        *   @return   可用的数据库连接  
        */  
      public   Connection   getConnection()   {  
          Connection   conn   =   null;  
          try   {  
              logger.info("从连接池中获得空闲的数据库连接");  
              datasource.setLoginTimeout(1);  
              conn   =   datasource.getConnection();  
              return   conn;  
          }  
          catch   (SQLException   ex)   {  
              ex.printStackTrace();  
          }  
          return   null;  
      }  
      /**  
        *   这是一个用来关闭所有的数据库连接相关的打开对象的方法,这样作的好处是不用在每一次调用了sql之后  
        *   要写一大串的关闭操作。  
        *   @param   conn   将要关闭的数据库连接  
        *   @param   st   将要关闭的数据库操作对象  
        *   @param   pst   将要关闭的预处理数据库操作对象  
        *   @param   cst   将要关闭的数据库存储过程调用对象  
        *   @param   rst   将要关闭的数据库记录集对象  
        *   @throws   java.lang.Exception   有可能要抛出的异常  
        */  
      public   void   closeAll(Connection   conn,Statement   st,PreparedStatement   pst,CallableStatement   cst,ResultSet   rst)  
              throws   Exception{  
          if(rst!=null){  
              rst.close();  
          }  
          if(st!=null){  
              st.close();  
          }  
          if(pst!=null){  
              pst.close();  
          }  
          if(cst!=null){  
              cst.close();  
          }  
          if(conn!=null){  
              conn.close();  
          }  
          System.out.println("==========>关闭连接成功!");  
      }  
  }   

你可能感兴趣的:(java,设计模式,sql,log4j,struts)