• 【Java 进阶篇】JDBC数据库连接池Druid工具类详解


    在这里插入图片描述

    在Java应用程序中,数据库连接是一种重要的资源,因为每次创建和销毁数据库连接都会产生开销,降低了系统性能。为了高效地管理数据库连接,降低资源消耗,常常使用数据库连接池。Druid是一个功能强大的数据库连接池,本文将详细介绍如何使用Druid连接池及其工具类。

    1. 什么是Druid连接池

    Druid是阿里巴巴开源的一个数据库连接池实现,它结合了传统数据库连接池的优点和一些独特的功能。Druid连接池具有如下特点:

    • 高效:Druid连接池采用了一些高效的技术,如预编译语句缓存、连接池预热等,可以提高数据库访问的效率。

    • 安全:Druid连接池内置了防SQL注入功能,可以有效地防止SQL注入攻击。

    • 强大的监控和统计功能:Druid连接池可以监控连接池的状态,包括活跃连接数、空闲连接数、执行SQL的次数等,可以帮助开发人员更好地了解应用程序的性能。

    • 配置灵活:Druid连接池提供了丰富的配置选项,可以根据应用程序的需求进行灵活配置。

    2. 导入Druid库

    要使用Druid连接池,首先需要在项目中导入Druid库。可以通过Maven或手动下载jar包来导入Druid库。

    Maven依赖:

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.2.6version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 配置Druid连接池

    配置Druid连接池需要创建一个DruidDataSource对象,并设置一些连接属性,如数据库URL、用户名、密码等。以下是一个简单的Druid连接池配置示例:

    import com.alibaba.druid.pool.DruidDataSource;
    
    public class DruidUtils {
        private static DruidDataSource dataSource;
    
        static {
            dataSource = new DruidDataSource();
            dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
            dataSource.setUsername("root");
            dataSource.setPassword("password");
        }
    
        public static DruidDataSource getDataSource() {
            return dataSource;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在上面的示例中,我们创建了一个DruidDataSource对象并设置了数据库的URL、用户名和密码。这是一个简单的配置示例,您可以根据实际需求设置更多的属性,如连接池大小、最大活跃连接数、初始化连接数等。

    4. 获取数据库连接

    使用Druid连接池,您可以通过DruidDataSource对象来获取数据库连接。以下是一个获取数据库连接的示例:

    import com.alibaba.druid.pool.DruidDataSource;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    public class DruidUtils {
        // 省略其他代码
    
        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在上面的示例中,我们定义了一个getConnection方法,该方法可以获取一个数据库连接。注意要处理SQLException异常。

    5. 关闭数据库连接

    使用完数据库连接后,一定要及时关闭以释放资源。Druid连接池的连接是可以重复使用的,所以在关闭连接时,实际上是将连接归还给连接池,而不是真正地关闭连接。

    以下是一个关闭数据库连接的示例:

    import com.alibaba.druid.pool.DruidDataSource;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DruidUtils {
        // 省略其他代码
    
        public static void close(Connection conn, Statement stmt) {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            try {
                if (conn != null) {
                    conn.close(); // 归还连接给连接池
                }
            } catch (SQLException e) {
            	e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    6. 编写Druid工具类

    为了更方便地使用Druid连接池,我们可以编写一个Druid工具类,该工具类封装了获取连接、关闭连接等操作。

    以下是一个简单的Druid工具类示例:

    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.pool.DruidPooledConnection;
    
    import java.sql.SQLException;
    
    public class DruidUtils {
        private static DruidDataSource dataSource;
    
        static {
            dataSource = new DruidDataSource();
            dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
            dataSource.setUsername("root");
            dataSource.setPassword("password");
        }
    
        public static DruidPooledConnection getConnection() throws SQLException {
            return dataSource.getConnection();
        }
    
        public static void close(DruidPooledConnection connection) {
            if (connection != null) {
                try {
                    connection.close(); // 归还连接给连接池
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在上面的示例中,我们将DruidPooledConnection对象用于获取连接,而不是Connection对象,以便于后续的连接管理。同时,我们编写了一个close方法用于关闭连接。这个工具类可以进一步封装其他常用的数据库操作。

    7. 编写Druid示例代码

    接下来,我们将编写一个示例代码,展示如何使用Druid连接池进行数据库操作。假设我们有一个User表,我们将编写一个查询所有用户的示例代码。

    import com.alibaba.druid.pool.DruidPooledConnection;
    
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class UserDao {
        public static void main(String[] args) {
            DruidPooledConnection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
    
            try {
                connection = DruidUtils.getConnection();
                String sql = "SELECT * FROM user";
                preparedStatement = connection.prepareStatement(sql);
                resultSet = preparedStatement.executeQuery();
    
                while (resultSet.next()) {
                    int id = resultSet.getInt("id");
                    String username = resultSet.getString("username");
                    String email = resultSet.getString("email");
    
                    System.out.println("ID: " + id + ", Username: " + username + ", Email: " + email);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                DruidUtils.close(connection);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在上面的示例中,我们首先通过DruidUtils获取数据库连接,然后使用PreparedStatement执行SQL查询语句,最后关闭连接。这个示例展示了如何使用Druid连接池执行查询操作。

    8. 总结

    Druid连接池是一个功能强大的数据库连接池,在高并发的Java应用中具有良好的性能和安全性。通过配置和使用Druid连接池,您可以更好地管理数据库连接,提高应用程序的性能和安全性。希望本文的介绍和示例对您有所帮助,让您更加熟悉如何使用Druid连接池。

    作者信息

    作者 : 繁依Fanyi
    CSDN: https://techfanyi.blog.csdn.net
    掘金:https://juejin.cn/user/4154386571867191
  • 相关阅读:
    RPA教程01:EXCEL自动化从入门到实操
    PDF可以修改内容吗?有什么注意的事项?
    Spring3.2.3+Quartz2.2.1 整合配置
    IT运维:使用数据分析平台监控奇安信
    瑞吉外卖强化(二):数据库优化
    ubuntu非源码安装 openCV
    ldc概述
    SpringMVC实现表单文件的上传
    Spring AOP原来是这样实现的
    C++---模板
  • 原文地址:https://blog.csdn.net/qq_21484461/article/details/133587968