前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 进阶篇】JDBC数据库连接池Druid工具类详解

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

作者头像
繁依Fanyi
发布2023-10-12 18:08:53
5600
发布2023-10-12 18:08:53
举报
在这里插入图片描述
在这里插入图片描述

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

1. 什么是Druid连接池

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

  • 高效:Druid连接池采用了一些高效的技术,如预编译语句缓存、连接池预热等,可以提高数据库访问的效率。
  • 安全:Druid连接池内置了防SQL注入功能,可以有效地防止SQL注入攻击。
  • 强大的监控和统计功能:Druid连接池可以监控连接池的状态,包括活跃连接数、空闲连接数、执行SQL的次数等,可以帮助开发人员更好地了解应用程序的性能。
  • 配置灵活:Druid连接池提供了丰富的配置选项,可以根据应用程序的需求进行灵活配置。

2. 导入Druid库

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

Maven依赖:

代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>

3. 配置Druid连接池

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

代码语言:javascript
复制
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;
    }
}

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

4. 获取数据库连接

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

代码语言:javascript
复制
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();
    }
}

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

5. 关闭数据库连接

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

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

代码语言:javascript
复制
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();
        }
    }
}

6. 编写Druid工具类

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

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

代码语言:javascript
复制
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();
            }
        }
    }
}

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

7. 编写Druid示例代码

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

代码语言:javascript
复制
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);
        }
    }
}

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

8. 总结

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

作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 什么是Druid连接池
  • 2. 导入Druid库
  • 3. 配置Druid连接池
  • 4. 获取数据库连接
  • 5. 关闭数据库连接
  • 6. 编写Druid工具类
  • 7. 编写Druid示例代码
  • 8. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档