自定义Connection Pool的源代码及用法
1.存储基本的数据库连接Bean
package BSC.pool;
import java.sql. *;
import java.io.Serializable;
 
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */
 
public class ConnBean implements java.io.Serializable {
 
  private Connection conn=null;
  private boolean inuse=false;
  public ConnBean() {
  }
  public ConnBean(Connection con)
  {
    if(con!=null)conn=con;
  }
  public void setConnection(Connection con)
  {
    conn=con;
  }
  public Connection getConnection()
  {
    return conn;
  }
  public void setInuse(boolean inuse)
  {
    this.inuse =inuse;
  }
  public boolean getInuse()
  {
    return inuse;
  }
  public void close()
  {
    try
    {
      conn.close();
    }
    catch(SQLException sqle)
    {
      System.err.println(sqle.getMessage());
    }
  }
}
2. 连接池管理Bean
 
package BSC.pool;
import java.sql. *;
import java.util.*;
import java.lang.InterruptedException;
import java.io.Serializable;
 
import BSC.pool.ConnBean;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */
 
public class PoolBean  implements java.io.Serializable {
 
  private String driver=null;
  private String url=null;
  private int size=0;
  private String username="";
  private String password="";
  private ConnBean connBean=null;
  private Vector pool=null;
  private String dbType="1";
  public PoolBean() {
  }
  public void setDriver(String d)
  {
    if(d!=null)driver=d;
  }
  public String getDriver()
  {
    return driver;
  }
  public void setURL(String u)
  {
    if(u!=null)url=u;
  }
  public String getURL()
  {
    return url;
  }
  public void setSize(int s)
  {
    if(s>1)size=s;
  }
  public int getSize()
  {
    return size;
  }
  public void setUsername(String un)
  {
    if(un!=null)username=un;
  }
  public String getUsername()
  {
    return username;
  }
  public void setPassword(String pwd)
  {
    if(pwd!=null)password=pwd;
  }
  public String getPassword()
  {
    return password;
  }
  public void setConnBean(ConnBean cb)
  {
    if(cb!=null)connBean=cb;
  }
  public ConnBean getConnBean() throws Exception
  {
    Connection con=getConnection();
    ConnBean cb=new ConnBean(con);
    cb.setInuse(true) ;
    return cb;
 
  }
  private Connection createConnection() throws Exception
  {
    Connection con=null;
    con=DriverManager.getConnection(url,username,password) ;
    return con;
  }
  public synchronized void initializePool() throws Exception
  {
    if(driver==null)
      throw new Exception("没有提供驱动程序名称!");
    if(url==null)
      throw new Exception("没有提供URL!");
    if(size<1)
      throw new Exception("连接池大小不能小于一!");
    try
    {
        // DriverManager.registerDriver(new COM.ibm.db2.jdbc.app.DB2Driver());
         Class.forName(driver).newInstance();
 
      for(int i=0;i<size;i++)
      {
        Connection con=createConnection();
        if(con!=null)
        {
          ConnBean cb=new ConnBean(con);
          addConnection(cb);
 
        }
      }
    }
    catch(Exception e)
    {
     System.err.println(e.getMessage());
     throw new Exception(e.getMessage() );
    }
 
  }
  private void addConnection(ConnBean cb)
 {
   if(pool==null)pool=new Vector(size);
    pool.addElement(cb);
 }
 
 public synchronized void releaseConnection(Connection con)
 {
   for(int i=0;i<pool.size() ;i++)
   {
     ConnBean cb=(ConnBean)pool.elementAt(i);
     if(cb.getConnection() ==con)
     {
       System.err.println("释放第"+i+"个连接");
       cb.setInuse(false);
       break;
     }
   }
 }
 public synchronized Connection getConnection()
 throws Exception
 {
   ConnBean  cb=null;
   for(int i=0;i<pool.size() ;i++)
   {
     cb=(ConnBean)pool.elementAt(i);
     if(cb.getInuse()==false)
     {
       cb.setInuse(true) ;
       Connection con=cb.getConnection();
       if(!con.isClosed()){
         return con;
       }else{
         pool.removeElement(cb);
       }
     }
   }
   try
   {
     Connection con=createConnection();
     cb=new ConnBean(con);
     cb.setInuse(true);
     pool.addElement(cb);
 
   }
   catch(Exception e)
   {
     System.err.println(e.getMessage() );
     throw new Exception(e.getMessage() );
   }
   return cb.getConnection() ;
 }
 
 public synchronized void emptyPool()
 {
  for(int i=0;i<pool.size() ;i++)
  {
    System.err.println("关闭第"+i+"JDBC连接");
    ConnBean cb=(ConnBean)pool.elementAt(i);
    if(cb.getInuse()==false)
          cb.close();
    else
    {
      try
      {
         java.lang.Thread.sleep(20000);
         cb.close();
      }
      catch(InterruptedException ie)
      {
        System.err.println(ie.getMessage());
      }
    }
  }
 }
  public String getDbType() {
    return dbType;
  }
  public void setDbType(String dbType) {
    this.dbType = dbType;
  }
}
3.用法
import java.sql.*;
import BSC.pool.*;
…其他代码
Connection conn=null;
try{
        poolbean = new PoolBean();
        poolbean.setDriver(this.getDriver());
        poolbean.setURL(this.getUrl());
        poolbean.setSize((new Integer(this.getSize())).intValue());
        poolbean.setUsername(this.getUsername());
        poolbean.setPassword(this.getPassword());
        poolbean.initializePool();
        conn=pool.getConnection();
        …其他代码
}catch(Exception e){
        e.printStackTrace();
}finally{
        try{
       if(conn!=null)
           conn.close();
}catch(SQLException sqle){
      sqle.printStackTrace();
 
}
}