JDBC数据库连接池

简介: JDBC数据库连接池

数据库连接池


什么是数据库连接池:


数据库连接池就是系统预先为客户准备好的数据库的连接集合,集合内有多个连接,每当用户请求连接时系统就给该用户发放一个连接,用户用完后再归还给系统。


为什么要使用连接池:


用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。


如何创建一个数据库连接池:


Java为连接池实现提供了一个规范(接口),规范的写法,我们需要实现DataSource接口,然后实现相应的方法即可。


一、自定义实现连接池


为了从本质上理解数据库连接池的实现原理,可以自定义实现一个连接池。


本连接池只是简单的实现了连接池的取得连接的功能,并为其添加了归还连接的方法,其他方法均未实现。

public class MyBdcp implements DataSource {
    //定义线程安全的数据库连接集合
    public static List<Connection> connList = Collections.synchronizedList(new ArrayList<>());
    public static String driver = "com.mysql.jdbc.Driver";
    public static String url = "jdbc:mysql://localhost:3306/emp";
    public static String userName = "root";
    public static String password = "root";
    static {
        //注册驱动
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //向集合内添加10个数据库连接
        try {
            Connection conn = null;
            for (int i = 0; i < 10; i++) {
                conn = DriverManager.getConnection(url, userName, password);
                connList.add(conn);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //取得一个连接,若池中没有连接了就返回一个null
    @Override
    public Connection getConnection() throws SQLException {
        Connection conn = null ;
        if (connList.size()>0) {
            conn = connList.remove(0) ;
            System.out.println("连接池中的连接数为:" + connList.size());
            return conn ;
        }
        return null;
    }
    //交还连接,并将其添加到池中
    public void result(Connection conn) {
        connList.add(conn) ;
    }
    //以下方法均为实现
    @Override
    public PrintWriter getLogWriter() throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
        // TODO Auto-generated method stub
    }
    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
        // TODO Auto-generated method stub
    }
    @Override
    public int getLoginTimeout() throws SQLException {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        // TODO Auto-generated method stub
        return false;
    }
    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        // TODO Auto-generated method stub
        return null;
    }
}


目录
相关文章
|
5天前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
12天前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
35 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
12天前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
47 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
7天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
12天前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
22 6
|
12天前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
21 4
|
12天前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
18 3
|
6天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
1月前
|
Java 关系型数据库 MySQL
使用MySQL JDBC连接数据库
使用MySQL JDBC连接数据库
|
2月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
【6月更文挑战第24天】Java的JDBC是数据库连接的桥梁,统一API简化了与MySQL等各类数据库的交互,降低复杂性并提高效率。在库存系统示例中,JDBC允许无缝查询和更新,无需关注底层实现。作为“黄金搭档”,JDBC还支持事务、批处理等功能,确保性能和安全性,是Java开发者不可或缺的工具。
22 1