`
vtrtbb
  • 浏览: 362399 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的数据库连接池

阅读更多
public class DBConnectionManager {
  private final static  DBConnectionManager instance=new DBConnectionManager();
  private DBConnectionPool pool;

   public static DBConnectionManager getInstance() {
    return instance;
  }
    public Connection getConnection() throws SQLException{
    return pool.getConnection();
  }
   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);
  }

 

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;
    }
}

 

 

 

public class Configuration {
    private Properties properties;
    private final static Configuration cfg = new Configuration();

    private Configuration() {
        properties = new Properties();
        InputStream is = null;
        try {
            is = getClass().getResourceAsStream("/app.properties");
            properties.load(is);
        } catch (Exception exception) {
          System.out.println("Can't read the properties file. ");
        } finally {
            try {
                if (is != null)
                    is.close();
            } catch (IOException exception) {
                // ignored
            }
        }
    }
        public static Configuration getInstance() {
      return cfg;
    }
        public String getValue(String key) {
        return properties.getProperty(key);
    }
}

 

分享到:
评论

相关推荐

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    C#高效数据库连接池源码

    `Demo`可能是一个示例应用程序,展示如何使用自定义的数据库连接池。 5. **连接池实现细节**: - **初始化**:在应用程序启动时,连接池会被初始化,预创建一定数量的数据库连接。 - **连接分配**:当应用程序...

    C# 数据库连接池 C# 数据库连接池

    数据库连接池是数据库管理中的一个重要概念,它在C#编程中扮演着优化数据库操作的关键角色。C#数据库连接池是一种管理数据库连接的技术,通过复用已存在的连接而不是每次请求时都创建新的连接,从而提高数据库操作的...

    03-数据库连接池驱动_数据库连接池;驱动_

    其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...

    Java jdbc数据库连接池总结

    数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来...

    数据库连接池java代码实现

    本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释其核心概念和工作原理。 连接池的基本思想是维护一组预初始化的数据库连接,当应用程序需要时,可以从池中获取一个连接,使用完毕后,再归还回...

    常用jdbc数据库连接jar包,数据库连接池jar包

    数据库连接池在初始化时会创建一定数量的数据库连接并保存起来,当应用程序需要连接时,可以从池中获取一个已存在的连接,而不是每次都去新建,用完后也不立即关闭,而是归还给连接池。这样可以显著减少建立和释放...

    Qt 多线程连接数据库——数据库连接池

    * 数据库连接池特点: * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接...

    c# mysql数据库连接池实现

    本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...

    数据库连接池的一个简单实现

    本篇文章将详细解析一个简单的Java实现数据库连接池的过程。 首先,我们要理解数据库连接池的基本原理。数据库连接池预先创建并维护一定数量的数据库连接,当应用程序需要访问数据库时,可以从池中获取一个已存在的...

    强烈推荐一个简单而实用的数据库连接池工程

    本篇文章将深入探讨数据库连接池的概念、工作原理以及一个简单而实用的数据库连接池工程。 首先,理解数据库连接池的基本概念。数据库连接池是在应用服务器启动时创建的一组预定义的数据库连接,这些连接在多个用户...

    C# 数据库连接池

    数据库连接池是数据库管理系统中的一个重要概念,主要用于优化数据库的连接操作。在C#编程中,数据库连接池可以高效地管理数据库连接,避免频繁创建和销毁连接导致的性能开销。本文将详细介绍C#中数据库连接池的工作...

    JAVA数据库连接池

    数据库连接池在初始化时会创建一定数量的数据库连接并保存在池中,当应用程序需要连接数据库时,不是直接创建新的连接,而是从连接池中获取一个已经存在的连接;使用完毕后,连接不会被立即关闭,而是归还到连接池,...

    配置数据库连接池

    数据库连接池的基本思想是预先创建并维护一定数量的数据库连接,当应用需要与数据库通信时,可以快速地从连接池中获取一个已建立的连接,而不是每次都新建一个。用完后,连接会归还到池中,供其他请求使用,而不是...

    java数据库连接池

    以下代码片段展示了如何在Java中实现一个简单的数据库连接池: ```java public class BaseDao { private String dbUrl = ""; // 数据库URL private String jdbcDriver = ""; // JDBC驱动 private String ...

    数据库连接池配置文件

    context.xml, 数据库连接池配置文

    delphi数据库连接池

    Delphi数据库连接池是一种高效的数据库资源管理技术,它允许应用程序在多用户环境下共享数据库连接,以提高性能并减少系统资源的消耗。连接池的核心思想是重用已建立的数据库连接,而不是每次需要时都创建新的连接,...

Global site tag (gtag.js) - Google Analytics