目录
一. 关键概述
JDBC(Java Database Connectivity)是 Java 数据库连接的标准 API,它提供了一组用于连接和操作关系型数据库的 Java 接口。JDBC 允许 Java 应用程序与各种数据库进行交互,而不需要针对特定数据库编写专用代码。
二. 基础架构
A[Java Application] --> B[JDBC API]
B --> C[JDBC Driver Manager]
C --> D[JDBC Driver]
D --> E[Database]
-
Java Application:Java应用程序,使用 JDBC API 的代码
-
JDBC API:
java.sql
和javax.sql
包中的接口 -
JDBC Driver Manager:管理数据库驱动程序
-
JDBC Driver:jdbc驱动,数据库厂商提供的具体实现
-
Datebase:数据库,实际的数据存储系统
三. 工作流程
participant App as Java 应用
participant DM as DriverManager
participant Driver as JDBC 驱动
participant DB as 数据库
App->>DM: 加载驱动
DM->>Driver: 注册驱动
App->>DM: 获取连接
DM->>Driver: 创建连接
Driver->>DB: 建立物理连接
DB-->>Driver: 返回连接
Driver-->>DM: 返回 Connection
DM-->>App: 返回 Connection
App->>Connection: 创建 Statement
Connection-->>App: 返回 Statement
App->>Statement: 执行 SQL
Statement->>DB: 发送 SQL
DB-->>Statement: 返回结果
Statement-->>App: 返回 ResultSet
App->>ResultSet: 处理数据
App->>Connection: 关闭连接
四. 核心组件
组件 | 描述 | 主要功能 |
---|---|---|
DriverManager | 管理 JDBC 驱动程序 | 加载驱动程序,创建数据库连接 |
Connection | 数据库连接对象 | 创建语句,管理事务 |
Statement | SQL 语句执行器 | 执行静态 SQL 语句 |
PreparedStatement | 预编译语句执行器 | 执行带参数的 SQL,防止 SQL 注入 |
CallableStatement | 存储过程执行器 | 调用数据库存储过程 |
ResultSet | 结果集对象 | 存储和遍历查询结果 |
五. 应用价值
-
数据库无关性:使用相同的 API 访问不同数据库(MySQL, Oracle, PostgreSQL 等)
-
标准化接口:统一了数据库访问方式
-
简化开发:减少数据库操作的复杂性
-
跨平台能力:与 Java 的"一次编写,到处运行"理念一致
六. 局限因素
-
需要编写大量样板代码
-
需要手动处理资源管理和异常
-
SQL 与 Java 代码混合,维护成本高
-
缺乏对象关系映射支持
七. 使用场景
-
企业级应用数据持久化
-
Web 应用程序后端数据库操作
-
数据迁移和ETL工具
-
报表生成系统
-
任何需要关系型数据库存储的Java应用
八. 驱动类型
-
Type 1: JDBC-ODBC 桥接驱动 (已过时)
-
Type 2: 本地 API 驱动 (部分 Java,部分本地代码)
-
Type 3: 网络协议驱动 (纯 Java,中间件架构)
-
Type 4: 原生协议驱动 (纯 Java,直接与数据库通信) - 最常用
九. 使用步骤——MySQL 为例
1. 添加驱动依赖
Maven 配置(pom.xml):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
2. 基础代码流程
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. 建立连接 (try-with-resources 自动关闭资源)
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
String user = "root";
String password = "123456";
try (Connection conn = DriverManager.getConnection(url, user, password);
// 3. 创建 PreparedStatement (防 SQL 注入)
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?")) {
// 4. 设置参数并执行查询
pstmt.setInt(1, 1001);
try (ResultSet rs = pstmt.executeQuery()) {
// 5. 处理结果集
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(name + ", " + age);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
十. 常见数据库驱动类名
| 数据库 | 驱动类名 |
|----------|-----------------------------------|
| MySQL | `com.mysql.cj.jdbc.Driver` |
| Oracle | `oracle.jdbc.driver.OracleDriver` |
| PostgreSQL| `org.postgresql.Driver` |
| SQL Server| `com.microsoft.sqlserver.jdbc.SQLServerDriver` |
十一. 一句话总结
通过 JDBC,Java 应用可以无缝与各种数据库交互。实际开发中,通常会结合 ORM 框架(如 Hibernate、MyBatis)简化操作。