21.jdbc 学习笔记:从原理到实践的全流程梳理
2026/5/23 2:59:32 网站建设 项目流程

目录

1. 数据库客户端-服务器结构与设计阶段

2. API(应用程序编程接口)的概念

3. 数据库多样性与 JDBC 的诞生

驱动程序的“生态”差异:

4. 驱动程序的获取途径

​编辑

​编辑

​编辑

5. 手动下载 vs Maven 导入(以 MySQL 驱动为例)

手动下载:

导入项目(IDEA 示例):

6. JDBC 编程步骤(核心流程)

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

步骤 2:建立网络连接(Connection)

步骤 3:构造 SQL 语句(PreparedStatement)

步骤 4:执行 SQL(Update 操作)

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 未内置),有三种途径:

  1. 官网:不太方便。

  2. GitHub:开源仓库。

  3. 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 示例):

  1. 在项目创建目录(如lib),将 jar 包复制进去(lib= Library,库的计算机术语)。

  2. 右键lib目录 →Add as Library(让项目识别到该 jar)。

6. JDBC 编程步骤(核心流程)

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

数据源决定数据从哪来、数据库服务器在哪。注意:不是所有数据库都是“客户端-服务器”结构(如 SQLite/DB2 是本地程序,无需网络)。

  • 导入类:import javax.sql.DataSource;

  • DataSource 是接口:public interface DataSource extends CommonDataSource, Wrapper

示例代码(两种方式):

// 方式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)

通过数据源获取连接:

Connection connection = dataSource.getConnection();

→ 类比“打电话”:拨号(建立连接)→ 对方接听(同意连接)→ 通话(操作)。

步骤 3:构造 SQL 语句(PreparedStatement)

客户端把 SQL 发给服务器执行,SQL 需是“语句对象”(预处理,减少语法检查开销)。

示例:插入数据

String sql = "insert into student values(null, '张三')"; PreparedStatement preparedStatement = connection.prepareStatement(sql);

→ 服务器端会解析 SQL(语法检查、优化),再执行。

步骤 4:执行 SQL(Update 操作)

增、删、改、建表等属于update​ 操作,用executeUpdate():这是把SQL语句发送到MySQL服务器上进行

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 格式、异常处理等细节。

本课代码:

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); // 影响行数 } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询