目录
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 未内置),有三种途径:
官网:不太方便。
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
示例代码(两种方式):
// 方式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); // 影响行数 } }