MySQL数据库《基础篇--数据库JDBC编程》

一、什么是JDBC

JDBC (Java Data Base Connectivity, Java数据库连接)是Java程序和数据库之间的桥梁,包含

了⼀套Java定义的⽤于执⾏SQL语句的接⼝,使开发者能够编写数据库的程序。JDBC 的主要作⽤是: 与数据库建⽴连接、发送SQL语句和处理数据库执⾏结果。

1. JDBC的应⽤场景

最常见的使用场景

  1. Java 桌面应用连接数据库Swing/JavaFX 做的客户端软件,需要存数据、查数据。

  2. Java Web 项目直接操作数据库 早期 Servlet/JSP 项目、SSM、SpringBoot 底层都依赖 JDBC。

  3. 后端微服务 / 分布式系统数据库交互微服务里的业务逻辑(增删改查)底层全是 JDBC 实现。

  4. 数据迁移 / ETL 工具Java 写的数据同步、报表、批处理程序。

  5. 测试 / 运维脚本用 Java 写自动化脚本查询、更新数据库。

  6. 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 语句。
    • 优势 :
      1. 性能更高:SQL 语句已编译,可重复使用。
      2. 更安全 :使用 ? 占位符,有效防止 SQL 注入。
      3. 代码更清晰:参数设置明确。
  • ResultSet
    • 作用 :表示数据库查询返回的结果集 ,通常通过 next() 方法进行遍历。

4. 异常处理

  • SQLException
  • 作用:处理 JDBC 操作中可能出现的数据库访问错误。

五、JDBC 编程标准流程

标准的 JDBC 操作遵循以下 6 个步骤:

  1. 导入包 :导入 java.sql.* 相关类。

  2. 注册驱动:加载数据库驱动类(MySQL 8.0+ 可省略,由 SPI 自动加载)。

  3. 建立连接 :使用 DriverManager 获取 Connection 对象。

  4. 创建执行对象 :创建 PreparedStatement 或 Statement 对象。

  5. 执行 SQL :调用 executeQuery()(查)或 executeUpdate()(增删改)。

  6. 处理结果 :对于查询,遍历 ResultSet;对于增删改,获取受影响行数。

  7. 关闭资源 :逆序 关闭 ResultSet -> Statement -> Connection(推荐使用 try-with-resources 自动关闭)。

相关推荐
布莱克6051 小时前
MySQL 增删改查(CRUD)语法详解
数据库·mysql·增删改查
Dovis(誓平步青云)1 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
2501_933670792 小时前
2027届大数据管理与应用求职数字化转型顾问:项目、SQL、业务理解怎么排优先级
数据库·sql
东方护航数据恢复(深圳)3 小时前
物流案例:勒索病毒 Mallox 加密 ERP 数据库,旧备份 + 残留页重组实录【东方护航数据恢复深圳店】
数据库·数据恢复·勒索病毒·二次开盘·开盘·数据镜像
.Hypocritical.3 小时前
Redis从入门到实战:核心原理、场景落地与避坑指南
数据库·redis·缓存
梦想画家3 小时前
SQLMesh Python 模型入门(二):依赖管理、引擎实战与内存优化
数据库·python·sqlmesh
Omics Pro3 小时前
经典多组学整合算法→商用云平台
数据库·人工智能·算法·机器学习·自然语言处理
xcLeigh3 小时前
【KingbaseES数据库教程】国产化信创背景下的数据库选型与初识
linux·数据库·windows·kes·数据选型
rm -rf * && haha.sh3 小时前
【Linux】Rocky 9.8 操作系统磁盘分区与MySQL数据目录迁移
linux·运维·mysql
资深技术分享员4 小时前
Geejing WebBuilder 数据库连接配置与在线 SQL 工具,运维的左右手
运维·数据库·sql·低代码