上一篇
JDBC连接MySQL数据库连接池,需引入驱动,配置连接参数,创建连接池对象,从池中获取连接操作
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数据库,并通过连接池管理数据库连接
