上一篇                     
               
			  如何用Java连接数据库
- 数据库
- 2025-05-30
- 4406

 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月。
 
 

 
			 
			 
			 
			 
			 
			 
			 
			