# java-jdbc **Repository Path**: snail259/java-jdbc ## Basic Information - **Project Name**: java-jdbc - **Description**: 本项目实现了 Java 的 JDBC 。 自己学习 Java 过程中对于知识点的强化记忆,强化代码练习;方便回顾和实用。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-05-23 - **Last Updated**: 2023-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-jdbc 的实现 ## 一、介绍 本项目实现了 Java 的 JDBC 。 **初衷**:学习-体验-成长。 ​ 自己学习 Java 过程中对于知识点的强化记忆,强化代码练习;方便回顾和实用。 **项目内容:**项目从***原生***到***封装***最后到***封装成工具类***依次实现 ### 1. 使用软件、驱动及工具 | 软件-驱动-工具 | 说明 | | ---------------------------- | ---- | | IEDA *2022.3.3* | | | MySQL *8.0.33* | | | mysql-connector-j-8.0.33.jar | | | druid-1.2.9.jar | | **驱动 jar 包版本说明:** | MySQL 版本 | 推荐驱动版本 | 说明 | | ------------- | ------------------------ | ------------------------------- | | Mysql *5.5.x* | com.mysql.jdbc.Driver | | | Mysql *5.7.x* | com.mysql.jdbc.Driver | | | Mysql *8.x* | com.mysql.cj.jdbc.Driver | 推荐使用8.0.25+ ,省略时区设置。 | ### 2. 目录结构 ## 二、Java-JDBC 原生实现 ### 1. Java-JDBC 原生实现 **版本:*v 1.0*** > Java -JDBC 实现步鄹: > > 1. 驱动注册 > 2. 获取连接 > 3. 创建 `statement` > 4. 发送 SQL 语句 > 5. 对结果集解析 > 6. 释放资源 更新说明: **版本:*v 2.0*** > Java -JDBC 实现步鄹: > > 1. 驱动注册(*利用反射避免驱动两次注册*) > 2. 获取连接 > 3. 创建 SQL 语句,并预编译`prepareStatement`(*使用prepareStatement()方法利用占位符减少 SQL语句中引号嵌套的复杂度及注入攻击问题。*) > 4. 给占位符赋值(*注意:传入的占位符的值必须与 SQL 语句中的占位符的位置一一对应*) > 5. 发送 SQL 语句 > 6. 对结果集解析 > 7. 释放资源 更新说明: 1. 优化驱动注册,减少系统开销。 2. 优化Statement,避免 SQL 语句复杂度;使用prepareStatement()方法利用占位符减少SQL语句中引号嵌套的复杂度;防止注入攻击问题。 ### 2.Java-JDBC 中 CURD 操作实现及优化 **版本:V3.0** 更新说明: 1. 基于v2.0完成原生 CURD 操作;DQL(数据查询语言) 和 DML(数据操作语言) **版本:V3.1** > Java -JDBC 实现步鄹: > > 1. 驱动注册(*利用反射避免驱动两次注册*) > > 2. 获取连接 > > 3. 创建 SQL 语句,并预编译`prepareStatement`(*使用prepareStatement()方法利用占位符减少 SQL语句中引号嵌套的复杂度及注入攻击问题。*) > > 4. 给占位符赋值(*注意:传入的占位符的值必须与 SQL 语句中的占位符的位置一一对应*) > > 5. 发送 SQL 语句 > > 6. 对结果集解析(针对 DQL 操作优化) > > 6.1、创建结果集的接收对象集合(list 集合) > > 6.2、获取当前结果集列的对象 > > 6.3、获取列的长度,便于水平遍历 > > 6.4、遍历结果集 > > ​ 6.4.1、创建当前列的接收对象(map) > > ​ 6.4.2、遍历当前列 > > ​ 6.4.2.1、获取指定列下角标的列明 > > ​ 6.4.2.2、获取指定列下角标的值 > > 6.5、将 map整行数据存储到(list)集合中 > > 7. 释放资源 更新说明: 优化executeUpdate()返回结果集解析,使结果集解析方法具有通用性。 ### 3.Java-JDBC 中 CURD 拓展功能 **版本:V 4.0** 更新说明: CURD 拓展功能补充: 1、实现主键回显,作用:主从表添加数据时需要主表主键。 2、批量添加数据。 3、开启事务,保障数据操作的原子性、一致性、隔离性、持久性。 ## 三、利用 Druid 连接池实现 Java-JDBC ### 1.直接使用Druid 连接池进行 CURD 操作 **版本:V 5.0** ​ 更新说明: ​ 直接使用 Druid 连接池进行CURD 操作;两种方式 **方式一:** > 1. 创建连接池对象 > 2. 设置连接参数 > 3. 获取连接 > 4. CURD 操作 > 5. 释放资源 **方式二:创建 properties 文件** > 1. 读取配置文件 > 2. 创建连接池对象,工厂模式 > 3. 获取连接 > 4. CURD 操作 > 5. 释放资源 ### 2.使用 Druid 封装 JDBC 的工具类 **版本:V5.1** ​ 更新说明: ​ 内部包含一个连接池对象,并对外提供一个获取连接和回收连接的方法。 > ``` > 1、连接池对象 > 2、初始化对象池 > 2.1、读取配置文件 > 2.2、创建连接,工厂模式 > 3、获取连接的方法 > 4、收回连接的方法 > ``` **版本:V5.2** 更新说明: * V2.0更新:利用线程本地变量存储连接信息,确保一个线程的多个方法获取同一个 connection 连接! * 优势:解决事务操作时 service 和 dao 同一个线程,传递参数问题 > 1、连接池对象 > > 2、线程本地变量存储连接池信息 > > 3、初始化对象池 > 3.1、读取配置文件 > 3.2、创建连接,工厂模式 > 4、获取连接的方法 > 5、收回连接的方法 ## 四、基于 JDBC 工具类封装 dao 层重复代码 **版本:6.0** 更新说明: 基于 JDBC 工具类封装 dao 层重复代码;封装两个方法: - 一个简化DQL(数据查询语言), - 一个简化DML(数据操纵语言)