上一篇

Java连接数据库主要通过JDBC API实现,首先加载数据库驱动(如mysql-connector-java),使用DriverManager获取Connection对象建立连接,随后通过Statement或PreparedStatement执行SQL语句,处理ResultSet返回的数据结果集,最后关闭连接释放资源,也可使用连接池(如HikariCP)或ORM框架(如MyBatis)优化性能与管理。
JDBC基础连接步骤(以MySQL为例)
准备驱动与环境
- 添加JDBC驱动依赖(Maven配置):
<!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
六步连接数据库
import java.sql.*;
public class JdbcDemo {
public static void main(String[] args) {
// 1. 加载驱动(JDBC 4.0+ 可自动加载)
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 2. 建立连接(重要参数:URL、用户名、密码)
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "securePwd123";
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
// 3. 创建SQL语句
String sql = "SELECT id, name FROM users";
// 4. 执行查询
ResultSet rs = stmt.executeQuery(sql);
// 5. 处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) { // 6. 异常处理
System.err.println("数据库错误: " + e.getMessage());
}
// try-with-resources 自动关闭连接
}
}
关键优化与安全实践
防SQL注入:使用PreparedStatement
String sql = "SELECT * FROM users WHERE email = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, "user@example.com"); // 参数化赋值
ResultSet rs = pstmt.executeQuery();
}
资源关闭规范
- 始终使用 try-with-resources(Java 7+)自动关闭
Connection,Statement,ResultSet。 - 手动关闭时需按反向顺序:
finally { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); }
配置文件分离
- 避免硬编码敏感信息,使用
properties文件:# config.properties db.url=jdbc:mysql://localhost:3306/mydb db.user=root db.password=securePwd123
Properties props = new Properties(); props.load(new FileInputStream("config.properties")); DriverManager.getConnection(props.getProperty("db.url"), props);
高性能连接池应用
推荐工具:HikariCP(业界最快连接池)
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/mydb");
config.setUsername("root");
config.setPassword("securePwd123");
config.addDataSourceProperty("cachePrepStmts", "true"); // 优化性能
try (HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection()) {
// 执行操作...
}
现代框架整合(Spring Boot)
配置数据源(application.yml)
spring:
datasource:
url: jdbc:mysql://localhost/mydb
username: root
password: securePwd123
driver-class-name: com.mysql.cj.jdbc.Driver
hikari: # 连接池参数
maximum-pool-size: 10
通过JPA操作数据库
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
// Getter/Setter省略
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
常见问题排查
| 错误现象 | 解决方案 |
|---|---|
No suitable driver found |
检查URL格式或驱动JAR是否缺失 |
Access denied for user |
核对用户名/密码及数据库权限 |
| 连接超时 | 验证网络、防火墙及数据库服务状态 |
总结与学习路径
- 基础掌握:JDBC六步流程 +
PreparedStatement安全机制。 - 进阶优化:连接池配置(HikariCP/Druid) + 配置文件加密。
- 框架集成:Spring Boot + JPA/MyBatis简化开发。
- 扩展学习:
- 分布式事务(JTA)
- 响应式数据库访问(R2DBC)
- 多数据源动态路由
权威引用:
- Oracle官方JDBC教程:Java Database Connectivity (JDBC) Technology
- MySQL Connector/J文档:MySQL JDBC Driver
- HikariCP性能对比:HikariCP Benchmark
本文遵循E-A-T原则,内容基于Java官方文档及行业最佳实践,更新于2025年7月。


