目录
[一、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 语句
可使用 Statement或 PreparedStatement(推荐后者,防 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,需检查:
-
IP 和端口是否写错 (如
127.0.0.1:3306是否正确); -
数据库服务器是否正常运行(MySQL 服务是否启动);
-
防火墙/云服务器权限(若跨机器访问,需确认 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 执行逻辑)是必备技能。