怎么用jdbc连接mysql数据库连接池
- 数据库
- 2025-07-21
- 5
JDBC连接MySQL数据库连接池,可以显著提高应用程序的性能和资源利用率,以下是详细的步骤和说明:

引入必要的JAR包
-
MySQL JDBC驱动:确保项目中包含了MySQL的JDBC驱动包,例如mysql-connector-java-x.x.x.jar,如果使用Maven项目,可以在pom.xml中添加以下依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.XX</version> </dependency> -
连接池库:常用的连接池库有DBCP、C3P0、HikariCP等,以HikariCP为例,如果使用Maven项目,可以在pom.xml中添加以下依赖:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency>
配置数据库连接信息
通常将数据库连接信息(如URL、用户名、密码)放在配置文件中,例如db.properties:

jdbc.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC jdbc.username=root jdbc.password=123456
创建数据库连接池
以HikariCP为例,创建一个数据库连接池的工具类:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.io.InputStream; import java.util.Properties; public class DataSourceUtil { private static HikariDataSource dataSource; static { try { // 加载配置文件 Properties properties = new Properties(); InputStream inputStream = DataSourceUtil.class.getClassLoader().getResourceAsStream("db.properties"); properties.load(inputStream); // 配置HikariCP HikariConfig config = new HikariConfig(); config.setJdbcUrl(properties.getProperty("jdbc.url")); config.setUsername(properties.getProperty("jdbc.username")); config.setPassword(properties.getProperty("jdbc.password")); config.setMaximumPoolSize(10); // 设置最大连接数 config.setMinimumIdle(5); // 设置最小空闲连接数 config.setIdleTimeout(30000); // 设置空闲超时时间 config.setConnectionTimeout(30000); // 设置连接超时时间 dataSource = new HikariDataSource(config); } catch (Exception e) { e.printStackTrace(); } } // 获取连接 public static java.sql.Connection getConnection() throws SQLException { return dataSource.getConnection(); } }
使用连接池获取连接并执行SQL操作
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcExample { public static void main(String[] args) { // 使用try-with-resources自动关闭资源 try (Connection connection = DataSourceUtil.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement("SELECT FROM users WHERE id = ?")) { // 设置参数 preparedStatement.setInt(1, 1); // 执行查询 ResultSet resultSet = preparedStatement.executeQuery(); // 处理结果集 while (resultSet.next()) { System.out.println("User ID: " + resultSet.getInt("id")); System.out.println("Username: " + resultSet.getString("username")); } } catch (SQLException e) { e.printStackTrace(); } } }
关闭连接池
在应用程序关闭时,需要关闭连接池以释放资源:
public class ApplicationContextListener { public static void contextDestroyed() { if (dataSource != null) { dataSource.close(); } } }
常见问题及解决方案
| 问题 | 解决方案 |
|---|---|
| 连接池无法初始化 | 确保配置文件路径正确,且配置文件中包含正确的数据库连接信息,检查是否引入了正确的连接池库和MySQL JDBC驱动。 |
| 连接超时或失败 | 检查数据库服务器是否正常运行,网络是否通畅,确保数据库连接信息(如URL、用户名、密码)正确无误,调整连接池的配置参数,如connectionTimeout和maximumPoolSize。 |
| SQL载入风险 | 使用PreparedStatement代替Statement,避免直接拼接SQL语句。PreparedStatement可以预编译SQL语句,有效防止SQL载入攻破。 |
| 资源未释放 | 使用try-with-resources语句自动关闭Connection、PreparedStatement和ResultSet,确保资源在使用后被正确释放,避免内存泄漏。 |
通过以上步骤,您可以成功使用JDBC连接MySQL数据库,并通过连接池管理数据库连接
