在Java项目中,使用Maven管理依赖并连接数据库是常见开发场景,以下是详细步骤及注意事项,涵盖依赖配置、数据库驱动加载、连接池使用及代码示例。
添加数据库依赖
首先在pom.xml中添加数据库驱动和连接池依赖,以MySQL为例,常用依赖如下:
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 连接池(如HikariCP) -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
不同数据库的驱动选择:
| 数据库 |groupId|artifactId|示例版本|
|————–|——-|———-|——–|
|MySQL 5.x |mysql |mysql-connector-java|5.1.49|
|MySQL 8.x |mysql |mysql-connector-java|8.0.28|
|PostgreSQL |org.postgresql|postgresql|42.3.3|
|Oracle |com.oracle.database.jdbc|ojdbc8|19.3.0.0|
|SQL Server |com.microsoft.sqlserver|mssql-jdbc|9.4.0.jre11|
配置数据库连接参数
在src/main/resources目录下创建application.properties或config.properties文件,存储连接信息:

# 数据库基础配置 db.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC db.username=root db.password=your_password db.driver=com.mysql.cj.jdbc.Driver # 连接池配置(HikariCP示例) db.pool.maximum-pool-size=10 db.pool.minimum-idle=5 db.pool.connection-timeout=30000 db.pool.idle-timeout=600000 db.pool.max-lifetime=1800000
参数说明:
db.url:包含协议、主机、端口、数据库名及连接参数(如时区设置)。useSSL:开发环境可禁用SSL以避免警告。serverTimezone:避免时区不匹配报错。
编写数据库连接工具类
通过连接池管理数据库连接,避免频繁创建销毁连接,以下是使用HikariCP的示例代码:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DBUtil {
private static HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("your_password");
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
// 连接池优化配置
config.setMaximumPoolSize(10);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);
dataSource = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
关键点:

- 使用静态代码块初始化连接池,确保单例模式。
- 通过
getConnection()获取连接,使用后需手动关闭(或尝试-with-resources语法)。
数据库操作示例
以下为查询和更新数据的完整示例:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public void getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("Username: " + rs.getString("username"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateUser(int id, String newEmail) {
String sql = "UPDATE users SET email = ? WHERE id = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, newEmail);
pstmt.setInt(2, id);
int affectedRows = pstmt.executeUpdate();
System.out.println("Updated rows: " + affectedRows);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意事项:
- 预编译语句(PreparedStatement):防止SQL注入,提高性能。
- 资源释放:使用try-with-resources自动关闭
Connection、PreparedStatement和ResultSet。 - 事务管理:需手动提交或回滚事务(默认为自动提交)。
常见问题排查
- 驱动加载失败:检查
pom.xml中依赖是否正确下载,driverClassName是否与驱动版本匹配。 - 连接超时:确认数据库服务是否启动,网络是否可达,检查连接池超时参数。
- 时区错误:在URL中添加
serverTimezone=UTC或指定本地时区(如Asia/Shanghai)。
相关问答FAQs
Q1: Maven下载依赖时提示“下载失败”怎么办?
A: 可能原因包括网络问题、仓库配置错误或依赖版本不存在,解决方法:

- 检查网络连接,尝试更换镜像源(如阿里云镜像)。
- 在
pom.xml中添加阿里云仓库配置:<repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> - 验证依赖版本号是否正确,可通过Maven中央仓库查询。
Q2: 数据库连接泄露如何避免?
A: 连接泄露未关闭会导致连接池耗尽,解决方法:
- 始终使用try-with-resources语法确保资源释放:
try (Connection conn = DBUtil.getConnection(); Statement stmt = conn.createStatement()) { // 执行SQL } // 自动关闭 - 监控连接池状态,通过HikariCP的
MBean或日志跟踪未释放连接。 - 避免在代码中缓存
Connection对象,每次使用后立即释放。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/246428.html