目录
[1. 数据库客户端-服务器结构与设计阶段](#1. 数据库客户端-服务器结构与设计阶段)
[2. API(应用程序编程接口)的概念](#2. API(应用程序编程接口)的概念)
[3. 数据库多样性与 JDBC 的诞生](#3. 数据库多样性与 JDBC 的诞生)
[4. 驱动程序的获取途径](#4. 驱动程序的获取途径)
[5. 手动下载 vs Maven 导入(以 MySQL 驱动为例)](#5. 手动下载 vs Maven 导入(以 MySQL 驱动为例))
[导入项目(IDEA 示例):](#导入项目(IDEA 示例):)
[6. JDBC 编程步骤(核心流程)](#6. JDBC 编程步骤(核心流程))
[步骤 1:创建数据源(DataSource)](#步骤 1:创建数据源(DataSource))
[步骤 2:建立网络连接(Connection)](#步骤 2:建立网络连接(Connection))
[步骤 3:构造 SQL 语句(PreparedStatement)](#步骤 3:构造 SQL 语句(PreparedStatement))
[步骤 4:执行 SQL(Update 操作)](#步骤 4:执行 SQL(Update 操作))
[7. 异常处理(SQLException)](#7. 异常处理(SQLException))
1. 数据库客户端-服务器结构与设计阶段
数据库交互基于客户端-服务器结构:
-
客户端工具:
cmd(命令行)、navicat(图形化工具)、自己编写代码实现(Java 等语言)。 -
服务器:提供数据库服务。
-
设计/调试阶段:客户端与服务器通过网络通信完成交互。

2. API(应用程序编程接口)的概念
MySQL 提供了一组 API(类/函数),供其他程序调用。例如:
-
MySQL 原生 API(C 语言风格)。
-
其他数据库/中间件的 API(操作系统、Redis、MQ 等)。
-
第三方大佬写好的程序/库。
但我们更希望用 Java 开发,因此需要 Java 对数据库 API 的"封装"。
3. 数据库多样性与 JDBC 的诞生
市面上有多种数据库(MySQL、Oracle、SQLServer、SQLite...),不同数据库的 API 差异大,学习成本高。
Java 给出的解决方案:JDBC(Java Database Connectivity)。
-
由 Java 标准库提供一套++类/方法++,把数据库 C 原生 API 封装成 Java 版本。
-
对不同数据库厂商的 API 进行++风格统一++。
驱动程序的"生态"差异:
-
商业公司驱动(Sun/Oracle):考虑实用性、盈利,用户多。
-
社区驱动(C++):追求"炫酷/NB",但实用内容少(如 SQLite/DB2 非客户端-服务器结构,C++ 很少优先考虑)。
→ 第三方没有"一统天下"的类似 JDBC 的方案,每个数据库厂商有自己的驱动。
4. 驱动程序的获取途径

驱动程序需额外下载安装(Java 未内置),有三种途径:
-
官网:不太方便。
-
GitHub:开源仓库。
-
Maven 仓库(推荐,类似"应用商店"):
-
服务器在海外,国内访问可能慢,但理论可打开。
-
示例:搜索
mysql jdbc,找到 MySQL Connector/J (注意:mysql-connector-java已重命名为com.mysql:mysql-connector-j,最新版需匹配 MySQL 服务器版本)。
-

5. 手动下载 vs Maven 导入(以 MySQL 驱动为例)
手动下载:
-
从 Maven 仓库下载
mysql-connector-j-8.0.33.jar(或其他版本)。 -
jar 包本质:类似 zip 压缩包,包含编译后的
.class文件,是 Java 生态发布程序的主流方式。
导入项目(IDEA 示例):
-
在项目创建目录(如
lib),将 jar 包复制进去(lib= Library,库的计算机术语)。 -
右键
lib目录 →Add as Library(让项目识别到该 jar)。
6. JDBC 编程步骤(核心流程)
步骤 1:创建数据源(DataSource)
数据源决定++数据从哪来、数据库服务器在哪++。注意:不是所有数据库都是"客户端-服务器"结构(如 SQLite/DB2 是本地程序,无需网络)。
-
导入类:
import javax.sql.DataSource; -
DataSource 是接口:
public interface DataSource extends CommonDataSource, Wrapper
示例代码(两种方式):
java
// 方式1:向上转型 + 向下转型(演示用)
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
// 方式2:直接实例化(不转型,更简洁)
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
dataSource.setUser("root");
dataSource.setPassword("2222");
URL 格式:jdbc:mysql://<主机>:<端口>/<数据库名>?<参数>

步骤 2:建立网络连接(Connection)
通过数据源获取连接:
java
Connection connection = dataSource.getConnection();
→ 类比"打电话":拨号(建立连接)→ 对方接听(同意连接)→ 通话(操作)。
步骤 3:构造 SQL 语句(PreparedStatement)
客户端把 SQL 发给服务器执行,SQL 需是**"语句对象"**(预处理,减少语法检查开销)。
示例:插入数据
java
String sql = "insert into student values(null, '张三')";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
→ 服务器端会解析 SQL(语法检查、优化),再执行。
步骤 4:执行 SQL(Update 操作)
增、删、改、建表等属于 update 操作,用 executeUpdate():这是把SQL语句发送到MySQL服务器上进行
java
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n); // 影响行数
7. 异常处理(SQLException)
JDBC 抛出 SQLException,需显式处理:
-
方式 1:
throws抛给上层方法处理(如main方法声明throws SQLException)。 -
方式 2:
try-catch捕获处理。
→ 类比"开车":throws是"驾照"(允许上路,事故找交警);try-catch是"事故处理"(自己解决)。
总结
JDBC 是 Java 操作数据库的标准方案,核心是封装数据库 API、统一操作风格。流程围绕「数据源 → 连接 → SQL 语句 → 执行」展开,需注意驱动版本匹配、URL 格式、异常处理等细节。
本课代码:
java
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Jdbc {
public static void main(String[] args) throws SQLException {
// // 方式1:向上转型 + 向下转型(演示用)
// DataSource dataSource = new MysqlDataSource();
// ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
// 方式2:直接实例化(不转型,更简洁)
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
dataSource.setUser("root");
dataSource.setPassword("Ss.123888");
//步骤 2:建立网络连接(Connection)
Connection connection = dataSource.getConnection();
//步骤 3:构造 SQL 语句(PreparedStatement)
String sql = "insert into student values(null, '张三', 15, 3)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//步骤 4:执行 SQL(Update 操作)
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n); // 影响行数
}
}


