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.sqljavax.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. 创建执行对象 :创建 PreparedStatementStatement 对象。

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

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

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

相关推荐
FL4m3Y4n2 小时前
Redis相关命令与原理
数据库·redis·缓存
小张贼嚣张2 小时前
SQL 正则表达式详解:语法、函数与实战案例(MySQL/Oracle通用)
mysql·oracle·正则表达式
木易 士心2 小时前
自然语言转数据库操作语句原理架构图分析和实现
数据库·后端
TDengine (老段)2 小时前
TDengine IDMP 1-产品简介
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
娇娇yyyyyy2 小时前
QT编程(20): Qt QListWidget QTreeWidget介绍
数据库·qt·microsoft
阿里云瑶池数据库2 小时前
阿里云瑶池数据库KVCache亮相NVIDIA GTC 2026
数据库·阿里云
橙子家2 小时前
行式存储(Row-based Storage)和列式存储(Column-base Storage)简介
数据库
l1t10 小时前
DeepSeek总结的 pg_regresql插件:真正可移植的 PostgreSQL 统计信息
数据库·postgresql
oradh10 小时前
Oracle 11.2.0.1版本升级至11.2.0.4_单机环境
数据库·oracle·oracle11g·oracle升级