22.深入剖析JDBC架构:从原生API到企业级数据交互核心

目录

[一、JDBC 概述](#一、JDBC 概述)

[二、JDBC 核心步骤(代码示例+图示)](#二、JDBC 核心步骤(代码示例+图示))

[步骤 1:创建数据源(DataSource)](#步骤 1:创建数据源(DataSource))

[步骤 2:建立连接(Connection)](#步骤 2:建立连接(Connection))

[步骤 3:构造 SQL 语句](#步骤 3:构造 SQL 语句)

[示例 1:插入数据(硬编码 SQL)](#示例 1:插入数据(硬编码 SQL))

[示例 2:插入数据(用户输入 + 占位符)](#示例 2:插入数据(用户输入 + 占位符))

[步骤 4:执行 SQL](#步骤 4:执行 SQL)

[示例 1:执行插入(增)](#示例 1:执行插入(增))

[示例 2:执行查询(查)](#示例 2:执行查询(查))

[步骤 5:关闭资源](#步骤 5:关闭资源)

[三、JDBC 与资源管理](#三、JDBC 与资源管理)

[四、常见错误与解决(Connection refused)](#四、常见错误与解决(Connection refused))

[五、JDBC 后续发展(框架封装)](#五、JDBC 后续发展(框架封装))

[六、附录:示例 SQL(建表、插入、查询)](#六、附录:示例 SQL(建表、插入、查询))

总结


一、JDBC 概述

JDBC(Java Database Connectivity)是 Java 标准库提供的一组类/方法 ,用于操作数据库。MySQL 也提供了对应的驱动包(需引入到项目中)。

  • 依赖管理:可通过 Maven 中央仓库引入驱动;部分大厂会搭建私有仓库。

  • 包结构 :驱动包是 jar压缩包(类似 rar),包含 .class二进制字节码文件;Java 源码(.java)编译后生成 .class文件。

二、JDBC 核心步骤(代码示例+图示)

JDBC 操作数据库的核心流程分为 5 步:数据源(DataSource)→ 建立连接 → 构造 SQL → 执行 SQL → 关闭资源。

步骤 1:创建数据源(DataSource)

数据源是连接 MySQL 服务器的入口,需配置数据库地址、用户名、密码等。

java 复制代码
// 1. 创建数据源(MySQL 服务器)
DataSource dataSource = new MysqlDataSource();
// 配置数据库地址(IP、端口、库名、字符编码)
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8");
((MysqlDataSource) dataSource).setUser("root");   // 数据库用户名
((MysqlDataSource) dataSource).setPassword("2222"); // 数据库密码
  • mysql 驱动包提供 MysqlDataSource数据库服务器在哪里对应 URL 中的 IP/端口。

步骤 2:建立连接(Connection)

通过数据源获取与数据库的网络连接。

java 复制代码
// 2. 和数据库服务器通信,建立网络连接
Connection connection = dataSource.getConnection();
  • 这是"申请资源"(不仅是内存,还包含网络通信资源)。

步骤 3:构造 SQL 语句

可使用 StatementPreparedStatement(推荐后者,防 SQL 注入)。

示例 1:插入数据(硬编码 SQL)

java 复制代码
// 3. 构造 SQL 语句(插入)
String sql = "insert into student values(null, '张三')";
PreparedStatement preparedStatement = connection.prepareStatement(sql);

示例 2:插入数据(用户输入 + 占位符)

为避免硬编码,可通过 Scanner接收用户输入,并使用**占位符 ?**​ 代替值:

java 复制代码
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要插入的 id: ");
int id = scanner.nextInt();
System.out.println("请输入要插入的 name: ");
String name = scanner.next();

// 占位符 SQL(? 占位置,后续替换)
String sql = "insert into student values(?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 替换占位符(从 1 开始计数)
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);

步骤 4:执行 SQL

  • 增、删、改 :使用 executeUpdate(),返回受影响的行数。

  • :使用 executeQuery(),返回 ResultSet(结果集)。

示例 1:执行插入(增)

java 复制代码
// 4. 执行 SQL(增、删、改)
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n); // 输出受影响行数

示例 2:执行查询(查)

java 复制代码
// 3. 构造 SQL(查询)
String sql = "select * from student";
PreparedStatement preparedStatement = connection.prepareStatement(sql);

// 4. 执行 SQL,返回结果集 ResultSet
ResultSet resultSet = preparedStatement.executeQuery();

// 遍历结果集(类似迭代器)
while (resultSet.next()) {
    // 获取列值(列名或索引)
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    System.out.println(id + " " + name);
}
  • ResultSet是"临时表",next()移动光标(初始在首行前,需先调 next()再取值)。

步骤 5:关闭资源

数据库资源(Connection、PreparedStatement、ResultSet)需手动关闭(顺序:先申请的资源后释放)。

java 复制代码
// 5. 关闭连接等资源
resultSet.close();        // 先关结果集
preparedStatement.close(); // 再关语句
connection.close();       // 最后关连接
  • 顺序错误会导致问题(如先关 Connection 再关 PreparedStatement 会报错)。

三、JDBC 与资源管理

Java 内置垃圾回收机制 (自动回收内存),但数据库连接、网络资源需手动释放(属于"非内存资源")。

四、常见错误与解决(Connection refused)

若执行时遇到 java.net.ConnectException: Connection refused: connect,需检查:

  1. IP 和端口是否写错 (如 127.0.0.1:3306是否正确);

  2. 数据库服务器是否正常运行(MySQL 服务是否启动);

  3. 防火墙/云服务器权限(若跨机器访问,需确认 MySQL 端口开放)。

五、JDBC 后续发展(框架封装)

实际开发中,很少直接写 JDBC 代码,而是使用更高层次的数据库框架 (如 MyBatis、MyBatis Plus、JPA 等)。这些框架底层都是对 JDBC 的封装,目的是简化代码、提高开发效率

  • 核心逻辑不变:SQL → 索引/事务 → JDBC → 框架封装。

六、附录:示例 SQL(建表、插入、查询)

sql 复制代码
use java117;            -- 切换数据库
show tables;           -- 查看表
drop table student;    -- 删除表(谨慎)
create table student (
    id int primary key auto_increment,
    name varchar(20)
);                     -- 建表
select * from student; -- 查询

总结

JDBC 是 Java 操作数据库的基础,核心流程为 数据源→连接→SQL→执行→关闭。实际开发中会用框架简化,但理解 JDBC 原理(尤其是资源管理、SQL 执行逻辑)是必备技能。

相关推荐
Raink老师9 小时前
【AI面试临阵磨枪-60】微服务下 AI 能力如何封装、网关、限流、监控
人工智能·微服务·面试
易辰君9 小时前
【数据库】MongoDB深度解析与Python操作指南:从安装到实战操作全覆盖
数据库·mongodb
小茴香3539 小时前
HTTP缓存
网络协议·http·缓存·面试
一直有一个ac的梦想9 小时前
cmu15445 2025fall lec 18 transactions with two-phase lock
java·开发语言·数据库
九皇叔叔9 小时前
Spring-Ai-Alibaba [04] 04-llm-platform-custom-demo
java·人工智能·spring
技术路上的探险家9 小时前
Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录
java·sa-token·单点登录·sso
身如柳絮随风扬10 小时前
Redis 集群脑裂深度剖析:成因、危害与防丢失策略
数据库
JAVA社区10 小时前
Java进阶全套教程(四)—— SpringMVC框架详解
java·开发语言·spring·面试·职场和发展
ㄣ知冷煖★10 小时前
统一网关架构实践:从 Token 鉴权到路由、策略与凭证池转发全链路解析
java·服务器·架构