`

数据库连接池实现原理

 
阅读更多
数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如:

外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection 方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。

数据库连接池技术带来的优势:

1. 资源重用

由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。

2. 更快的系统响应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。

3. 新的资源分配手段

对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术,几年钱也许还是个新鲜话题,对于目前的业务系统而言,如果设计中还没有考虑到连接池的应用,那么…….快在设计文档中加上这部分的内容吧。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。

4. 统一的连接管理,避免数据库连接泄漏

在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。


package test;
import java.sql.*;
import java.util.*;

public class DBConnpool
{
    private int inUse = 0;
    private Vector<Connection> connections = new Vector<Connection>();
    private String poolname = "dbconnpool";
    private String dbid = "jdbc:mysql://localhost:3306/teasystem";
    private String drivername = "com.mysql.jdbc.Driver";
    private String username = "root";
    private String password = "123";
    private int maxconn = 5000;
    
    public DBConnpool(){}
    public void setdbid(String dbid)
    {
        this.dbid = dbid;
    }
    public void setusername(String username)
    {
        this.username = username;
    }
    public void setpassword(String password)
    {
        this.password = password;
    }
    public void setmaxconn(int maxconn)
    {
        this.maxconn = maxconn;
    }
    public String getdbid()
    {
        return dbid;
    }
    public String getusername()
    {
        return username;
    }
    public String getpassword()
    {
       return password;
    }
    public int getmaxconn()
    {
        return maxconn;
    }
    //将连接返还给连接池
    public synchronized void reConnection(Connection conn)
    {
     Connection con = conn;
        connections.addElement(con);
        inUse--;
    }
    //从连接池获取一个连接
    public synchronized Connection getConnection()
    {
        Connection con = null;
        if(connections.size()>0)
        {
            con = (Connection)connections.elementAt(0);
            connections.removeElementAt(0);
            try{
                if(con.isClosed())
                {
                    con = getConnection();
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }else if(maxconn == 0||inUse<maxconn)
        {
            con = newConnection();
        }
        if(con != null)
        {
            inUse++;
        }
        return con;
    }
    private Connection newConnection()
    {
        Connection con = null;
        try{
            Class.forName(drivername);
            con = DriverManager.getConnection(dbid,username,password);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        return con;
    }
    public synchronized void closeConn()
    {
        Enumeration allConnections = connections.elements();
        while(allConnections.hasMoreElements())
        {
            Connection con = (Connection)allConnections.nextElement();
            try{
                con.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}

使用连接池,把暂时不使用的链接放入连接池,到需要使用的时候,从连接池中取出链接使用


分享到:
评论

相关推荐

    JDBC数据库连接池实现原理

    1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...

    Java数据库连接池的原理与应用.pdf

    在使用数据库连接池时,常见的连接池实现有DBCP、C3p0、TomcatJdbcPool、BoneCP和Druid等。以DBCP为例,使用它需要导入commons-dbcp.jar和commons-pool.jar包。在Maven项目中,需要在pom.xml配置文件中添加相应的...

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

    `ConnectionPool`可能是项目或类库的命名空间或类,包含实际的数据库连接池实现;`Demo`可能是一个示例应用程序,展示如何使用自定义的数据库连接池。 5. **连接池实现细节**: - **初始化**:在应用程序启动时,...

    JAVA 完整的数据库连接池实现

    在 Java 中,有多种流行的数据库连接池实现,如 Apache Commons DBCP、C3P0、HikariCP 和 Druid 等。这里我们将以 HikariCP 为例,讲解如何配置和使用数据库连接池。 1. **HikariCP 简介** HikariCP 是一个高性能...

    数据库连接池的图解原理

    常见的数据库连接池实现有Apache的DBCP、C3P0,以及HikariCP等。其中,HikariCP以其优秀的性能和稳定性受到许多开发者的青睐,它通过零拷贝、最小化锁竞争等手段优化了连接管理,降低了系统开销。 数据库连接池除了...

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

    ### C#中的数据库连接池实现 在C#中,主要使用ADO.NET框架来实现数据库连接池。以下是一些关键类和方法: 1. **System.Data.SqlClient.SqlConnection**:这是SQL Server数据库的连接类,支持连接池。在创建`...

    代理模式之静态代理---数据库连接池对象实现原理

    在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...

    数据库连接池的原理机制学习

    ### 数据库连接池的原理机制深入解析 #### 一、基本概念及原理 数据库连接池是一种用于管理和重用数据库连接的技术。它通过预创建并维护一定数量的数据库连接,使得应用程序能够快速获取并释放这些连接,从而提高...

    Java jdbc数据库连接池总结

    数据库连接池(connection pool)的工作原理是为了解决资源的频繁分配、释放所造成的问题。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时...

    数据库连接池原理

    ### 数据库连接池原理 #### 一、背景与价值 ##### 1.1 背景 在现代软件开发中,应用程序与数据库之间的交互是非常常见的。为了提高这种交互的效率和减少资源消耗,通常会使用数据库连接池技术。连接池位于应用...

    java数据库连接池.pdf

    4. 数据库连接池实现原理:数据库连接池(Database Connection Pool)是一种管理数据库连接的机制,它通过维护一个数据库连接的池,按需分配和回收这些连接,从而提高数据库操作的效率和系统资源利用率。当应用程序...

    数据库连接池java代码实现

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

    数据库连接池的实现(很完整(支持多种数据库

    综上所述,这个压缩包提供了一个全面的数据库连接池实现,适用于多种数据库,包括源码和测试,对于学习和开发数据库相关的应用程序具有很高的价值。通过研究和使用这个实现,开发者可以更好地理解和优化自己项目的...

    数据库连接池的工作原理

    4. **常见的数据库连接池实现** - **C3P0**:开源的JDBC连接池,提供异常检测、连接测试等功能。 - **HikariCP**:高性能的连接池,设计目标是提供最低的延迟和最佳的性能。 - **DBCP**:Apache提供的基础连接池...

    数据库连接池的三种实现方法

    在Java开发中,有三种常见的数据库连接池实现:DBCP(BasicDataSource)、C3P0以及阿里开源的Druid。下面将详细介绍这三种数据库连接池的实现原理和特性。 1. **DBCP (BasicDataSource)** DBCP 是 Apache Commons ...

    Java中数据库连接池原理机制的详细讲解

    ### Java中数据库连接池原理机制的详细讲解 #### 一、引言 在现代软件开发中,特别是基于Java的企业级应用开发中,数据库连接管理是一个关键环节。由于数据库连接是昂贵的资源,频繁地创建与关闭连接将严重影响系统...

    java动态代理实现数据库连接池

    ### Java动态代理实现数据库连接池 #### 背景与挑战 在开发应用程序时,数据库连接池...这种实现方式灵活且易于扩展,对于希望深入理解Java动态代理机制以及数据库连接池实现原理的开发者来说,具有较高的参考价值。

Global site tag (gtag.js) - Google Analytics