一、什么是JDBC
JDBC (Java Data Base Connectivity, Java数据库连接)是Java程序和数据库之间的桥梁,包含
了⼀套Java定义的⽤于执⾏SQL语句的接⼝,使开发者能够编写数据库的程序。JDBC 的主要作⽤是: 与数据库建⽴连接、发送SQL语句和处理数据库执⾏结果。
1. JDBC的应⽤场景
最常见的使用场景
-
Java 桌面应用连接数据库Swing/JavaFX 做的客户端软件,需要存数据、查数据。
-
Java Web 项目直接操作数据库 早期 Servlet/JSP 项目、SSM、SpringBoot 底层都依赖 JDBC。
-
后端微服务 / 分布式系统数据库交互微服务里的业务逻辑(增删改查)底层全是 JDBC 实现。
-
数据迁移 / ETL 工具Java 写的数据同步、报表、批处理程序。
-
测试 / 运维脚本用 Java 写自动化脚本查询、更新数据库。
-
ORM 框架的底层实现 MyBatis、Hibernate、JPA 全部基于 JDBC 封装,它们只是简化写法,真正干活的还是 JDBC。
一句话总结
只要是 Java 程序要和 MySQL/Oracle/PostgreSQL 等数据库通信,就一定用到 JDBC。
2. JDBC⼯作原理
-
MySQL 工作原理:
-
JDBC 是接口
-
MySQL 驱动是实现
-
通过 TCP 协议和 MySQL 通信
-
流程:加载驱动 → 建立连接 → 执行 SQL → 处理结果 → 关闭资源
-
-
开发用 PreparedStatement,防 SQL 注入

二、为什么要使⽤JDBC
⾸先回顾⼀下使⽤客⼾端操作数据库的过程,主要分为以下⼏步:
a. 连接到数据库服务
b. 发送SQL语句
c. 得到返回结果并显⽰
d. 关闭连接
JDBC使⽤过程可以概括为:加载数据库⼚商的驱动包、建⽴连接、创建Statement、执⾏SQL、
处理结果释放资源和关闭连接。
三、使⽤JDBC
1.创建Maven⼯程并配置国内镜像
•
修改Maven配置⽂件,在 <mirrors></mirrors> 标签中添加 mirror ⼦节点
•
单独安装的Maven配置⽂件路径为:maven安装⽬录/conf/settings.xml
•
IDEA⾃带的Maven配置⽂件路径为:IDEA安装⽬录/plugins/maven/lib/maven3/conf/settings.xml



2.获取MySQL驱动包
•
在Maven仓库 mvnrepository.com 搜索MySQL,找到最新版的驱动包

3.修改pom.xml⽂件
在⼯程中的pom.xml中的 <dependencies></dependencies> 标签中添加MySQL依赖,如下所
⽰:
sql
<dependencies>
<!-- MySQL 驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
4.建⽴数据库连接
•
使⽤驱动管理类 DriverManager 的静态⽅法获取数据库连接
sql
// 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jobs_info_db?
characterEncoding" +
"=utf8&allowPublicKeyRetrieval=true&useSSL=false",
"root",
"123456");
•
通过数据源 DataSource 对象获取,推荐在实际开发中应⽤这种⽅式
sql
// 设置数据源的连接串、⽤⼾名和密码
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/jobs_info_db?
characterEncoding" +
"=utf8&allowPublicKeyRetrieval=true&useSSL=false");
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("123456");
// 把mysqlDataSource 转换为JDBC的dataSource
DataSource dataSource = mysqlDataSource;
MySQL数据库连接URL格式: jdbc:mysql://服务器地址:端⼝/数据库?参数名=值[&参数名=
值]...
5.创建Statement
•
Statement是⽤于执⾏静态SQL语句并返回执⾏结果的对象
sql
// 通过connection获取statement对象
Statement statement = connection.createStatement();
6.执⾏SQL语句
•
执⾏select查询时返回的是⼀个结果集,⽤ResultSet接收
•
执⾏nsert, update, delete操作时,返回的是受影响的⾏数,⽤int类型接收
sql
// 执⾏select语句, 并接收结果集
ResultSet resultSet = statement.executeQuery("select id, name, sno, age,
gender, enroll_date, class_id from student");
// 执⾏insert, update, delete语句,并接收受影响的⾏数
int row = statement.executeUpdate("update student set age = 20 where id = 2");
7.处理结果集
如果返回的是⼀个结果集,则需要遍历这个集合获取对应列的值,具体代码如下:
sql
// 遍历结果集获取数据
while (resultSet.next()) {
// 编号
long id = resultSet.getLong("id");
// 姓名
String name = resultSet.getString("name");
// 学号
String sno = resultSet.getString("sno");
// 年龄
int age = resultSet.getInt("age");
// 性别
byte gender = resultSet.getByte("gender");
// ⼊学时间
Date enrollDate = resultSet.getDate("enroll_date");
// 班级编号
long classId = resultSet.getLong("class_id");
// TODO: 使⽤获取到的值...
}
8.释放资源
•
在整个数据库访问过程中创建的对象都需要释放,包括:ResultSet,Statement和Connection,
后创建的先释放
sql
// 释放结果集
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 释放statement
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭连接
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
四、JDBC 核心架构与接口类详解
JDBC (Java Database Connectivity) 是 Java 执行 SQL 语句的标准 API。我们主要与 java.sql 和 javax.sql 两个包中的类打交道。
1. 驱动管理类
DriverManager- 作用:管理数据库驱动,负责建立应用程序与数据库之间的连接。
- 核心方法 :
getConnection(String url, String user, String password): 获取数据库连接。
2. 连接接口
Connection- 作用 :表示与特定数据库的会话(连接)。所有的通信都基于此连接。
- 核心方法 :
createStatement(): 创建一个Statement对象来发送 SQL 语句。prepareStatement(String sql): 创建一个PreparedStatement对象(推荐使用,防 SQL 注入)。setAutoCommit(boolean autoCommit): 设置是否自动提交事务。
3. 执行接口与类
Statement- 作用:用于执行静态 SQL 语句并返回结果。
- 缺点:存在 SQL 注入风险,不推荐用于动态条件查询。
PreparedStatement(⭐ 重点)- 作用 :
Statement的子接口,用于执行预编译的 SQL 语句。 - 优势 :
- 性能更高:SQL 语句已编译,可重复使用。
- 更安全 :使用
?占位符,有效防止 SQL 注入。 - 代码更清晰:参数设置明确。
- 作用 :
ResultSet- 作用 :表示数据库查询返回的结果集 ,通常通过
next()方法进行遍历。
- 作用 :表示数据库查询返回的结果集 ,通常通过
4. 异常处理
SQLException- 作用:处理 JDBC 操作中可能出现的数据库访问错误。
五、JDBC 编程标准流程
标准的 JDBC 操作遵循以下 6 个步骤:
-
导入包 :导入
java.sql.*相关类。 -
注册驱动:加载数据库驱动类(MySQL 8.0+ 可省略,由 SPI 自动加载)。
-
建立连接 :使用
DriverManager获取Connection对象。 -
创建执行对象 :创建
PreparedStatement或Statement对象。 -
执行 SQL :调用
executeQuery()(查)或executeUpdate()(增删改)。 -
处理结果 :对于查询,遍历
ResultSet;对于增删改,获取受影响行数。 -
关闭资源 :逆序 关闭
ResultSet->Statement->Connection(推荐使用try-with-resources自动关闭)。