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

📄 dbconnectionmanager.java

📁 公司自己开发的工作流引擎
💻 JAVA
字号:
package cn.com.iaspec.workflow.organize.ext;

import java.sql.*;
import java.util.*;

/**
 *
 * <p>Title:数据库连接池管理</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: IASPEC Technologies</p>
 * @author xiesonglin
 * @version 1.0
 */
public class DBConnectionManager{
  private final static DBConnectionManager instance=new DBConnectionManager();
  private String dataBaseType="ORACLE";
  private DBConnectionPool pool;

  /**
   * Use singleton pattern, only return one instance of DBConnectionManager.
   * @return DBConnectionManager
   */
  public static DBConnectionManager getInstance(){
    return instance;
  }

  public String getDataBaseType(){
    return dataBaseType==null?"":dataBaseType.toUpperCase();
  }

  /**
   * Get a connection
   * @return Connection
   * @throws SQLException this method
   */
  public Connection getConnection()
      throws SQLException{
    return pool.getConnection();
  }

  /**
   * Free a connection
   * @param con connection
   * @throws SQLException this method
   */
  public void freeConnection(Connection con)
      throws SQLException{
    pool.freeConnection(con);
  }

  private DBConnectionManager(){
    init();
  }

  private void init(){
    String driver=ConnectProperties.dbDriver;
    String url=ConnectProperties.dbUrl;
    String user=ConnectProperties.dbUser;
    String password=ConnectProperties.dbPassword;
    dataBaseType=ConnectProperties.dataBaseType;
    int maxConn=Integer.parseInt(ConnectProperties.maxConnect);
    try{
      Class.forName(driver);
    }
    catch(ClassNotFoundException ex){
      ex.printStackTrace();
    }
    pool=new DBConnectionPool(url,user,password,maxConn);
  }

  // inner class

  class DBConnectionPool{

    private Vector freeConnections=new Vector();
    private int maxConn;
    private int connNumb;

    private String URL;
    private String password;
    private String user;

    public DBConnectionPool(String URL,String user,String password,int maxConn){
      this.URL=URL;
      this.user=user;
      this.password=password;
      this.maxConn=maxConn;
    }

    public synchronized void freeConnection(Connection con){
      System.out.println("begin freeConnection...");
      freeConnections.addElement(con);
      connNumb--;
      notifyAll();
      System.out.println("connection count is:"+connNumb);
    }

    public synchronized Connection getConnection()
        throws SQLException{
      Connection con=null;
      if(freeConnections.size()>0){
        con=(Connection)freeConnections.firstElement();
        freeConnections.removeElementAt(0);
        try{
          if(con.isClosed()){
            con=getConnection();
          }
        }
        catch(SQLException e){
          con=getConnection();
        }
      }
      else if(maxConn==0||connNumb<maxConn){
        con=newConnection();
      }
      if(con!=null){
        connNumb++;
      }
      System.out.println("connection count is:"+connNumb);
      return con;
    }

    private Connection newConnection()
        throws SQLException{
      System.out.println("begin newConnection...");
      Connection con=DriverManager.getConnection(URL,user,password);
      return con;
    }
  }

}

⌨️ 快捷键说明

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