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月。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/7313.html