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

📄 connectionpoolmanager.java

📁 JAVA数据库编程实例源码及其一些Java基本介绍
💻 JAVA
字号:
package connectionpoolservlet;/** * Title:			Servlet使用数据库连接池 * Description:			教学示范 * Copyright:			Copyright (c) 2003 * Company:			北京师范大学计算机系 * @author			孙一林 * @version			1.0 */import java.io.*;import java.sql.*;import java.util.*;public class connectionPoolManager {  static private connectionPoolManager instance;  //定义服务器端连接池管理器的唯一实例  final private int poolSize = 10;       //定义连接池的容量  private Vector con_Vector;             //定义存放数据库连接实例的数组  private boolean[] inUse;               //定义判断数据库连接是否可用的数组  private boolean closed = false;        //定义判断连接池是否已经销毁的变量  static synchronized public connectionPoolManager getInstance() {  //返回服务器端的唯一连接池管理器实例    if (instance == null) {              //若服务器端存在连接池管理器实例,则返回此实例,若不存在,则创建后返回实例      instance = new connectionPoolManager();    }    return instance;  }  public connectionPoolManager() {      //连接池管理器初始化函数    con_Vector = new Vector(poolSize);  //初始化存放数据库连接的数组    inUse = new boolean[poolSize];    try    {      setupConnectionPool();    }    catch(Exception ex)    {      ex.printStackTrace();    }  }  private void setupConnectionPool() throws SQLException {  //建立数据库连接池函数    for (int i=0; i<poolSize; i++)       //调用连接数据源管理器类向连接池中加入数据库连接    {      Connection connection = new dataSourceManager().getConnection();      con_Vector.addElement(connection);      inUse[i] = false;                  //设置新加入的数据库连接为未使用状态    }  }  public connectionWithIdx getConnection()    //返回带有索引的数据库连接  {    if (closed)                          //如果连接池已销毁,则首先建立数据库连接池    {      try      {        setupConnectionPool();      }      catch(Exception ex)      {        ex.printStackTrace();      }      closed = false;      System.out.println("连接池已开放");    }    connectionWithIdx con = null;    for (int i=0; i<con_Vector.size(); i++)        //搜索未使用的数据库连接    {      if(inUse[i]==false)                    //若存在未被使用的数据库连接,则使用此连接      {        con = new connectionWithIdx();       //建立带有索引的数据库连接类实例        con.connection = (Connection)con_Vector.elementAt(i);  //使用未被使用的数据库连接建立带有索引的数据库连接类实例        con.idx = i;                         //为此实例数据库连接的索引赋值        inUse[i] = true;                     //将连接池中此数据库连接设置为已被使用状态        int freeCon = 0;                     //判断连接池中有多少未被使用的数据库连接        for(int j=0; j<con_Vector.size(); j++)        {          if(inUse[j]==false)          {            freeCon++;          }        }        System.out.println("连接池中共有" + freeCon + "个未被使用的连接");        return con;                         //返回带有索引的数据库连接类实例      }    }    int freeCon = 0;                 //若所有数据库连接都处于被使用状态,则返回空值    for(int i=0; i<con_Vector.size(); i++)    {      if(inUse[i]==false)      {        freeCon++;      }    }    System.out.println("连接池中共有" + freeCon + "个未被使用的连接");    return con;  }  public void freeConnection(int connectionIdx)  //将使用完的数据库连接放回到连接池中  {    inUse[connectionIdx] = false;            //将连接池中此数据库连接设置为未使用状态    int freeCon = 0;                         //判断连接池中有多少未被使用的数据库连接    for(int i=0; i<con_Vector.size(); i++)    {      if(inUse[i]==false)      {        freeCon++;      }    }    System.out.println("连接池中共有" + freeCon + "个未被使用的连接");    closeConnection();                //试图关闭连接池  }  public void closeConnection()       //若没有用户使用此连接池中的连接,则销毁连接池  {    int freeCon = 0;                  //判断连接池中有多少未被使用的数据库连接    for(int i=0; i<con_Vector.size(); i++)    {      if(inUse[i]==false)      {        freeCon++;      }    }    if(freeCon==poolSize)           //若未被使用的数据库连接等于连接池的容量,则销毁连接池    {      try      {        for(int i=0; i<poolSize; i++)        {          ((Connection)con_Vector.elementAt(i)).close();          inUse[i] = false;        }      }      catch(Exception ex)      {        ex.printStackTrace();      }      closed = true;      System.out.println("连接池已关闭");    }  }}

⌨️ 快捷键说明

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