Java 数据库连接池 DBCP 的介绍
什么是数据库连接池?
在传统的JDBC开发中,每次连接数据库都要进行数据库的连接和断开操作,这样会极大地浪费系统资源和时间,尤其是在高并发的情况下。为了解决这个问题,我们可以采用连接池技术,将一些连接预先放在池子中,在需要的时候从池子中获取连接,用完后再放回池子中,避免频繁的连接和断开操作。
DBCP 是什么?
DBCP是Apache Commons组件库的一部分,它是一种开源的JDBC连接池。使用DBCP连接池,我们可以让程序自动获取数据库连接和释放连接,无需手动编写驱动,建立连接,释放连接等繁琐的操作。同时DBCP还支持空闲连接的验证功能,保证连接的可用性。
使用 DBCP 连接池
使用DBCP步骤如下:
- 添加相关的jar包,具体可参考官方文档。
- 在代码中配置DBCP连接池参数。
- 从连接池中获取连接,使用DBCP连接池中的有关API。
配置 DBCP 连接池参数
使用DBCP连接池时需要在代码中配置连接池参数。 连接池参数主要包括:
- 数据库连接地址
- 数据库用户名和密码
- 最大连接数
- 最小空闲连接数
- 连接池大小
- 等待连接超时时间
- 空闲连接回收时间
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp2.BasicDataSource;
public class DBCPConnectionUtil {
private static BasicDataSource dataSource;
static {
Properties props = new Properties();
props.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
props.setProperty("url", "jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
props.setProperty("username", "root");
props.setProperty("password", "root");
dataSource = new BasicDataSource();
dataSource.setDriverClassName(props.getProperty("driverClassName"));
dataSource.setUrl(props.getProperty("url"));
dataSource.setUsername(props.getProperty("username"));
dataSource.setPassword(props.getProperty("password"));
//配置最大连接数量
dataSource.setMaxTotal(10);
//配置最小空闲数量
dataSource.setMinIdle(5);
// 配置连接池大小
dataSource.setInitialSize(5);
// 配置获取连接时的最大等待时间,单位毫秒
dataSource.setMaxWaitMillis(5000);
// 配置空闲连接的逐出时间,单位毫秒
dataSource.setRemoveAbandonedTimeout(180);
}
public static Connection getConnection() throws SQLException {
Connection conn = dataSource.getConnection();
return conn;
}
// 关闭Connection
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
示例1:获取连接
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestDBCP {
public static void main(String[] args) throws SQLException {
// 获取DBCP连接
Connection connection = DBCPConnectionUtil.getConnection();
// 查询数据
String sql = "select id, name, age from user where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 1);
ResultSet resultSet = statement.executeQuery();
// 处理结果集
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getInt("age"));
}
// 关闭连接
DBCPConnectionUtil.close(connection);
}
}
示例2:释放连接
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestDBCP {
public static void main(String[] args) throws SQLException {
// 获取DBCP连接
Connection connection = DBCPConnectionUtil.getConnection();
// 查询数据
String sql = "select id, name, age from user where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 1);
ResultSet resultSet = statement.executeQuery();
// 处理结果集
while (resultSet.next()) {
System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getInt("age"));
}
// 释放连接
statement.close();
resultSet.close();
DBCPConnectionUtil.close(connection);
}
}
以上两个示例分别演示了如何获取连接和如何释放连接,其它DBCP连接池相关操作方式与普通的JDBC编程方式一致。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 数据库连接池 DBCP 的介绍 - Python技术站