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

📄 dbconnectionmanager.java

📁 雷霆论坛是用J2EE技术开发的功能强大、扩展性强、易于定制
💻 JAVA
字号:
package lightningboard.db;

import java.util.Vector;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import lightningboard.Configuration;

/**
 * Database Connection Manager
 * @version 0.3.5
 * @author Xiaobo Liu
 */
public class DBConnectionManager {
  private final static  DBConnectionManager instance=new DBConnectionManager();
  private DBConnectionPool pool;

  /**
   * Use singleton pattern, only return one instance of DBConnectionManager.
   * @return DBConnectionManager
   */
  public static DBConnectionManager getInstance() {
    return instance;
  }
  /**
   * 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() {
    Configuration cfg=Configuration.getInstance();
    String db_driver=cfg.getValue("DB.DRIVER");
    String db_url=cfg.getValue("DB.URL");
    String db_user=cfg.getValue("DB.USER");
    String db_password=cfg.getValue("DB.PASSWORD");
    int db_maxConn=Integer.parseInt(cfg.getValue("DB.MAX_CONNECTIONS"));
    try {
      Class.forName(db_driver);
    }
    catch (ClassNotFoundException ex) {
      System.out.println(ex);
    }
    pool = new DBConnectionPool(db_url,db_user,db_password,db_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) {
            freeConnections.addElement(con);
            connNumb--;
            notifyAll();
        }

        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++;
            }
            return con;
        }

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


}

⌨️ 快捷键说明

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