当前位置:首页 > 数据库 > 正文

JDBC如何连接数据库?

使用 JDBC连接数据库需加载驱动,调用DriverManager.getConnection()传入数据库URL、用户名和密码,建立连接后通过Statement执行SQL操作,最后关闭连接释放资源。

什么是JDBC

JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的标准API,它允许开发者通过统一的接口访问多种关系型数据库(如MySQL、Oracle、PostgreSQL等),无需针对不同数据库编写独立代码,JDBC的核心作用是建立Java应用程序与数据库之间的桥梁,实现数据的增删改查(CRUD)操作。


JDBC连接数据库的6个核心步骤

以下以连接MySQL 8.0+为例,其他数据库只需替换驱动和连接字符串。

导入JDBC驱动

在项目中添加数据库驱动的依赖:

  • Maven项目(pom.xml): <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
  • 手动导入

    MySQL官网下载JAR包并添加到项目路径。

加载数据库驱动

使用Class.forName()显式加载驱动类(MySQL 8.0+需指定新驱动名):

Class.forName("com.mysql.cj.jdbc.Driver");

建立数据库连接

通过DriverManager.getConnection()获取连接对象,需提供:

  • 数据库URL:jdbc:mysql://主机名:端口/数据库名?参数
  • 用户名密码 String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "your_password";

Connection connection = DriverManager.getConnection(url, user, password);

JDBC如何连接数据库? 第1张

处理查询结果

遍历ResultSet获取数据:

while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); }

关闭连接释放资源

必须显式关闭连接以避免资源泄漏(推荐try-with-resources):

try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery()) { // 处理结果... } catch (SQLException e) { e.printStackTrace(); } // 自动关闭资源


完整代码示例

import java.sql.*; public class JdbcDemo { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb"; String user = "user"; String password = "securePass123!"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM products"); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { System.out.println("Product: " + rs.getString("name") + ", Price: " + rs.getDouble("price")); } } catch (SQLException | ClassNotFoundException e) { System.err.println("数据库连接失败: " + e.getMessage()); } } }


关键注意事项

  1. 异常处理

    始终捕获SQLException并处理连接失败、SQL语法错误等场景:

  2. 防SQL载入

    禁止直接拼接SQL字符串!务必使用PreparedStatement:

    JDBC如何连接数据库? 第2张

    // 错误示例(危险!) String badSQL = "SELECT * FROM users WHERE name='" + inputName + "'"; // 正确做法 PreparedStatement safeStmt = conn.prepareStatement("SELECT * FROM users WHERE name=?"); safeStmt.setString(1, inputName);
  3. 连接池优化

    高并发场景使用连接池(如HikariCP、Tomcat JDBC Pool)提升性能:

    HikariConfig config = new HikariConfig(); config.setJdbcUrl(url); config.setUsername(user); config.setPassword(password); HikariDataSource dataSource = new HikariDataSource(config); Connection conn = dataSource.getConnection(); // 从池中获取连接

  4. 安全实践

    • 数据库密码加密存储(如使用环境变量或Vault)
    • 生产环境启用SSL:在URL中添加&useSSL=true&requireSSL=true
    • 最小权限原则:为应用分配仅需的数据库权限
    • 常见问题解决

      错误类型 原因 解决方案
      No suitable driver URL格式错误或驱动未加载 检查URL拼写,确认Class.forName()已执行
      Access denied for user 用户名/密码错误或权限不足 验证凭证,检查数据库用户权限
      Connection timed out 数据库服务未启动或网络不通 检查数据库状态及防火墙设置
      ResultSet closed 过早关闭Connection或Statement 确保结果处理完毕后再关闭资源


      JDBC是Java操作数据库的基石,掌握其连接流程(加载驱动→建立连接→执行SQL→处理结果→关闭资源)是开发数据库应用的核心能力,关键要点包括:

      • 使用PreparedStatement提升安全性与性能
      • 通过try-with-resources确保资源释放
      • 生产环境务必配置连接池和SSL加密
      • 遵循最小权限原则管理数据库账户

      引用说明

      JDBC如何连接数据库? 第3张

0