如何用Java连接数据库

如何用Java连接数据库

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 核对用户名/密码及数据库权限
连接超时 验证网络、防火墙及数据库服务状态

总结与学习路径

  1. 基础掌握:JDBC六步流程 + PreparedStatement安全机制。
  2. 进阶优化:连接池配置(HikariCP/Druid) + 配置文件加密。
  3. 框架集成:Spring Boot + JPA/MyBatis简化开发。
  4. 扩展学习
    • 分布式事务(JTA)
    • 响应式数据库访问(R2DBC)
    • 多数据源动态路由

权威引用

如何用Java连接数据库

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/7313.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年5月30日 03:17
下一篇 2025年5月30日 03:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN