JDBC 拾枝杂谈—入门篇(通俗易懂)

news/2024/11/28 5:25:48/

目录

一、前言

二、JDBC介绍

        1.基本概述 : 

        2.基本原理 : 

三、JDBC模拟

        1.模拟接口 :

        2.模拟实现类 : 

        3.模拟测试类 : 

        4.模拟扩展 : 

四、JDBC入门

        1.编写JDBC程序的核心四部曲 : (全文背诵)

        2.准备工作 : 

                ①导入jar包

                ②创建测试表

        3.代码演示 : 

五、总结


一、前言

  • 开门见山,6.6日开始我们正式进入JDBC的学习,该系列博文适合有一定Java基础和MySQL基础的小伙伴儿们,感谢各位阅读本篇博文的佬们🌹🌹!
  • 第一节内容,up主要和大家分享一下JDBC的基本原理,JDBC的简单模拟,以及第一个JDBC程序的演示
  • 关于注意事项,还是老规矩——代码中的注释也很重要;不要眼高手低;点击文章的侧边栏目录或者文章开头的目录可以进行跳转。
  • 良工不示人以朴,所有文章都会适时补充完善。大家如果有问题都可以在评论区进行交流或者私信up。感谢阅读!

二、JDBC介绍

        1.基本概述 : 

        JDBC全称"Java DataBase Connectivity",直译Java数据库连接;JDBC是Java提供的一套用于数据库访问的应用程序API,由一组接口和类构成(主要位于java.sql和javax.sql包下),Java程序⚪只需要面向这套接口编程即可

        JDBC为访问不同的数据库提供的标准统一的接口,并且为使用者屏蔽了细节问题。Java人使用JDBC,可以连接任何提供了JDBC驱动程序的DBS(数据库操作系统),从而完成对DB(数据库)的各种操作。

        2.基本原理 : 

                在MySQL系列博文中我们说到——使用Java程序来操作DBMS(数据库管理系统),是访问DBMS最常用的途径,没有之一。那么,请大家思考一个问题——Java程序是如何操作数据库的?

                直接访问?显然不太现实。因为Java目前是Oracle旗下的产品,如果我们想通过Java程序来访问DB2数据库(IBM旗下),或者是SQL Server数据库(微软旗下),由于不同公司旗下的DBMS底层结构不完全相同,所以大概率你是无法通过Java程序直接访问的。
                那么,假设,即便可以直接访问,为了访问不同公司的数据库产品,我们就需要在Java程序中定义不同的方法,如下图所示 : 

                明眼人一看就懂,瞎🐓⑧扯🥚。我们面向对象学了那么久,基本的思想还是有的。如果不同的数据库都要定义不同的方法来访问,显然不利于Java程序的管理。

                那么,新的问题来了——怎么办?(🐔:哎哟,你干嘛~)(bushi)

                幸好,比我们🐂🖊一千倍的人多了去。这些个🐂B人聚在一起,时间一长自然想出了牛逼方法——在Java中规定一套接口规范,并让不同的数据库厂商去实现这组接口,程序员只需要在Java程序中调用接口的方法即可(接口的多态)
                当然,由于不同的数据库底层结构不同,它们在实现这组接口时,具体的实现方式肯定会有差异,但是大方向上均遵循接口定义的规范。牛逼方法的实现如下图所示 : 

                上图中,“实现接口的一组类”称为驱动类,也简称为驱动,会打包到一个.jar文件中。例如,MySQL驱动如下 : 

                若DBMS发生了更新,只需要更新用于连接的jar包即可,利于维护。


三、JDBC模拟

        1.模拟接口 :

        时隔多日,终于要再次使用IDEA。我们新建一个项目JDBC_Demo,并新建一个模拟规范的接口Jdbc_Simulation代码如下 : 

package introduction.simulation;/*** @author : Cyan_RA9* @version : 21.0*/
public interface Jdbc_Simulation {//开启连接public Object linking();//数据库的"CRUD"public void crud();//关闭连接public void close();
}

        2.模拟实现类 : 

                以Jdbc_To_MySQL类为模拟的实现类,实现Jdbc_Simulation接口,代码如下 : 

package introduction.simulation;/*** @author : Cyan_RA9* @version : 21.0*/
public class Jdbc_To_MySQL implements Jdbc_Simulation{@Overridepublic Object linking() {System.out.println("连接到MySQL数据库");return null;}@Overridepublic void crud() {System.out.println("执行MySQL的增删查改");}@Overridepublic void close() {System.out.println("关闭MySQL连接");}
}

        3.模拟测试类 : 

                以Test_Jdbc类为测试类,在测试类中通过接口的多态,调用实现类的方法Test_Jdbc类代码如下 : 

package introduction.simulation;public class Test_Jdbc {public static void main(String[] args) {Jdbc_Simulation js = new Jdbc_To_MySQL();js.linking();js.crud();js.close();}
}

                运行结果 : 

        4.模拟扩展 : 

                若我们还想进行Oracle数据库的连接,同样可以进行模拟,只需要重新定义一个类去实现Jdbc_Simulation接口,然后更改测试类中的调用逻辑即可。我们定义一个Jdbc_To_Oracle类,代码如下 :

package introduction.simulation;/*** @author : Cyan_RA9* @version : 21.0*/
public class Jdbc_To_Oracle implements Jdbc_Simulation{@Overridepublic Object linking() {System.out.println("连接到Oracle数据库");return null;}@Overridepublic void crud() {System.out.println("执行Oracle的增删查改");}@Overridepublic void close() {System.out.println("关闭Oracle连接");}
}

                对于调用类,扩展更加方便。某些情况下,都不需要去定义新的类,直接更改接口多态中new出的实现类对象即可,底层会根据动态绑定机制自动调用相应的方法

                测试类Test_Jdbc代码如下 : 

package introduction.simulation;public class Test_Jdbc {public static void main(String[] args) {//操作MySQL数据库Jdbc_Simulation js = new Jdbc_To_MySQL();js.linking();js.crud();js.close();System.out.println("====================================");//操作Oracle数据库Jdbc_Simulation js2 = new Jdbc_To_Oracle();js2.linking();js2.crud();js2.close();}
}

                运行结果 : 

                OK,经过这个小小的模拟,我们可以较为明显地感受到——接口编程带来的好处——极大地丰富了程序的可扩展性和可维护性,即统一调用的问题
                当然,在实际情况中,实现JDBC要比这复杂的多,但是逻辑上是一致的。


四、JDBC入门

        1.编写JDBC程序的核心四部曲 : (全文背诵

                注册驱动——加载Driver类

                获取连接——得到Connection

                执行SQL——发送crud相关的SQL给MySQL执行,如果是查询操作会返回结果。

                释放资源——关闭相关连接

        2.准备工作 : 

                ①导入jar包

                首先,在IDEA的项目下新建一个目录libs,如下图所示 :

                接着,将MySQL中Connector_J包下的mysql-connector-j-8.0.33.jar文件拷贝到libs目录下,如下图所示 : 

                右键该jar文件,选择"Add as Library...",如下图所示 : 

                出现提示框后,点击OK即可。加入成功后可以看到内容显示,如下图所示 : 

                ②创建测试表

                在MySQL中新建一个jdbc_ex数据库,用于存放jdbc的测试内容。在jdbc_ex数据库下新建一个学生表stus,代码如下 : 

CREATE TABLE IF NOT EXISTS `stus`(`id` MEDIUMINT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(64) NOT NULL DEFAULT '',`sex` CHAR(16) NOT NULL DEFAULT 'female',`score` DECIMAL(5,1) NOT NULL DEFAULT 0.0
) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin ENGINE INNODB;SELECT * FROM stus;

        3.代码演示 : 

                up以Jdbc_1类作为演示类,代码如下 : 注释很重要

package introduction.example;import com.mysql.cj.jdbc.Driver;    //注意,高版本要用cj包下的jdbc.Driver;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class Jdbc_1 {public static void main(String[] args) throws SQLException {
//JDBC核心四部曲 ://1.注册驱动/*使用“new com.mysql.cj.jdbc.Driver().var”来获取Driver对象,会自动导包。*/Driver driver = new Driver();//2.获取连接String url = "jdbc:mysql://localhost:3306/jdbc_ex";/*1° jdbc:mysql://,固定格式,表示协议,通过JDBC的方式连接到MySQL;2° localhost表示本机,此处也可以是IP地址;3° 3306表示MySQL默认的监听端口;4° jdbc_ex表示具体要连接的MySQL DBMS的数据库;5° JDBC连接MySQL的本质就是Socket套接字连接。*///将登录用户的用户名和密码放入Properties对象(key的格式固定,value按实际情况)Properties properties = new Properties();properties.setProperty("user","root");properties.setProperty("password","RA9_Cyan");//正式获取连接Connection connect = driver.connect(url, properties);//3.执行SQLString sql = "INSERT INTO stus " +"VALUES" +"(NULL,'Cyan', 'male', 420)," +"(NULL,'Ice', 'male', 419);";Statement statement = connect.createStatement();int i = statement.executeUpdate(sql);/*1° 使用Connection对象的createStatement()方法可以获取到Statement对象,Statement对象用于执行静态SQL,并返回其生成的结果对象;2° Statement类的executeUpdate方法可以执行传入的sql语句,若执行的SQL为DML,其返回结果i表示影响的行数。Affected rows : i,*/System.out.println(i > 0 ? "Successfully" : "Failed");//4.释放资源statement.close();connect.close();}
}

                运行结果 : 

                在Navicat中查询jdbc_ex数据库中的stus表,查看执行效果,如下图所示 : 

                This isn't the end. 继续,修改要执行的SQL语句, 测试Update和Delete,如下所示 : 

        /*!!! :注意,如果像up这样换行,表名后必须加空格。*/String sql = "UPDATE stus " +"SET `name` = 'Five', sex = 'female'" +"WHERE id = 2;";

                运行结果 : 

                最后再来测试一下DELETE语句,如下 : 

        String sql = "DELETE FROM stus " +"WHERE `name` = 'Cyan';";

                运行效果 :  


五、总结

  • 🆗,以上就是JDBC——第一小节的全部内容了。大家能搞清楚JDBC的原理,以及JDBC程序编写的核心四部曲就足够了。
  • 下一小节内容是JDBC——API,我们不见不散。感谢阅读!

        System.out.println("END--------------------------------------------------------------------------");


http://www.ppmy.cn/news/239786.html

相关文章

Lexer(Ver. Hand)

本文介绍如何手撕词法分析器&#xff0c;整体来说难度不大&#xff0c;还是文件读取麻烦。 lexer.h #ifndef LEXER_H #define LEXER_H#include <iostream> #include <fstream> #include <vector> #include <string>using namespace std;enum token_typ…

【Pytorch】模型摘要信息获取、模型参数获取及模型保存的三种方法

目录 问题一&#xff1a;模型摘要信息的获取问题二&#xff1a;模型参数的获取问题三&#xff1a;模型的保存方式 问题1&#xff1a;我想得到模型的摘要信息&#xff0c;包括每一层的名称、输入尺寸、输出尺寸以及参数量。 PyTorch Summary是一个用于计算模型参数量和输出尺…

Databend 开源周报第 96 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 虚拟列 查询 J…

djangoo配置与运行

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

【云原生】docker-Cgroup资源限制

Docker容器的资源控制 Docker通过Cgroup 来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写&#xff0c;是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源…

Yolov3 模型构建和深入掌握快速搭建网络的搭积木方法

&#xff08;一&#xff09;设计Conv2dBatchLeaky 1、了解LeakyReLU激活函数 LeakyReLU 激活层&#xff0c;创建一个可调用对象以计算输入 x 的 LeakReLU 。其中&#xff0c;x为输入的 Tensor 感觉和飞桨的api有点相同&#xff0c;可以对照参考理解&#xff1a; LeakyReLU激活…

Easeui 02 tree组件.

1.添加tree组件. tree组件的位置&#xff1a;DataGrid and Tree(表格和树) → tree(树)&#xff1b; 复制 tree组件到 "菜单管理"的div里面&#xff0c;如&#xff1a; 这里要动态绑定数据&#xff0c;所以把死数据删除&#xff0c;只留下一个 ul&#xff0c;如&am…

围棋知名AI-KataGo 下载分享

下载地址 下载链接: 围棋 提取码: 2hvp 里面有详情 这个AI 是很知名的围棋AI,并且是开源的 喜欢围棋的就去看看吧