⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbconnpool.java

📁 数据库连接池的写法
💻 JAVA
字号:
/*
 * 创建日期 2005-10-21
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package databaseConnectPool;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
import java.sql.*;
import java.util.*;

public class DBConnPool {
  //正在使用连接的数量
  private int using;
  //目前可用的连接数,即空闲连接
  private Vector connections=new Vector();
  //最大连接数
  private int maxconn;
  //连接池名
  private String poolname;
  //数据库标识
  private String dbid;
  //驱动程序名
  private String drivername;
  //数据库帐号
  private String username;
  //数据库密码
  private String passwd;

  public DBConnPool(String poolname,String drivername,String dbid,
                    String username,String passwd,int maxconn){
    this.poolname=poolname;
    this.drivername=drivername;
    this.dbid =dbid;
    this.username =username;
    this.passwd=passwd;
    this.maxconn=maxconn;
  }

  /*将空闲连接返回给连接池*/
  public synchronized void returnConnection(Connection conn){
    //将指定连接加到向量末尾
    connections.addElement(conn);
    //连接用户减一
    using--;
    System.out.println(using);
  }

  /*从连接池得到一个连接*/
  public synchronized Connection getConnection(){
    Connection conn = null; //Connection是一个类,
    //connections是一个向量,用于存储连接对象,它所存储是的所有空闲状态的可用连接
    if (connections.size() > 0) {
      System.out.println(connections.size());
      //获取连接列表的第一个连接
      conn = (Connection) connections.elementAt(0);
      connections.removeElementAt(0);//获得一个连接,并将此连接从队列中删除.
      //如果此连接已关闭,刚继续获取,
      try {
        if (conn.isClosed())
          conn = getConnection();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
      //如果实际使用的连接数小于最大连接数即有可用连接),就新增加一个连接
    else if (maxconn == 0 || using < maxconn){
      //如此时无可用连接(maxconn == 0)且连接数又未达到上限(using < maxconn)),就创建一个新连接
        conn=newConnection();
      }
      //如果连接数已达到上限就返回空指针
      if (conn!=null){
          using++;
      }
      System.out.println(using);
    return conn;
  }

/*创建新的连接*/
  public Connection newConnection(){
    Connection conn=null;
    try{
      //加载驱动
      Class.forName(drivername);
      conn=DriverManager.getConnection(dbid,username,passwd);
      
    }catch(Exception e){
      e.printStackTrace();
      return null;
    }
    return conn;
  }

 /*关闭所有连接*/
 public synchronized void closeConn(){
   Enumeration allConnections=connections.elements();
   while (allConnections.hasMoreElements()){
     Connection conn=(Connection) allConnections.nextElement();
     try{
       conn.close();
     }catch(SQLException e){
       e.printStackTrace();
     }
   }
   connections.removeAllElements();
 }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -