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

news2024/11/25 2:49:20

目录

一、前言

二、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{
    @Override
    public Object linking() {
        System.out.println("连接到MySQL数据库");
        return null;
    }

    @Override
    public void crud() {
        System.out.println("执行MySQL的增删查改");
    }

    @Override
    public 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{
    @Override
    public Object linking() {
        System.out.println("连接到Oracle数据库");
        return null;
    }

    @Override
    public void crud() {
        System.out.println("执行Oracle的增删查改");
    }

    @Override
    public 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.执行SQL
        String 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.coloradmin.cn/o/614667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sys Tick【转】

STM32学习及应用笔记一:SysTick定时器学习及应用 - STM32/STM8技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 1、SysTick究竟是什么? 关于SysTick在STM32的资料中并没有详细的介绍,这可能由于SysTick是ARM内核的东西。在…

在用对讲机中竟有近5成属于违规使用?

目前对讲机在很多领域和场景中都有着广泛的应用,包括建筑工地、宾馆饭店、住宅小区、大型商场超市、安保活动、物业管理等。 不过据非官方数据统计,在用对讲机中竟有近5成属于违规使用,这严重干扰了城市上空的无线电波秩序。 根据近年来无线…

多行 SQL 格式化换行调整(数据清洗、数据迁移)

多行 SQL 格式化换行调整(数据清洗、数据迁移) 原数据数据如下: select * from user_info;select * from user_info; select * from user_info;INSERT INTO student VALUES (107, zhao, NULL, 3, 北京); select * from user_info;INSERT INT…

哪个骨传导蓝牙耳机的好,几款高性能的骨传导蓝牙耳机分享清单

骨传导耳机是目前在运动领域最火热的产品,也是最适合运动的耳机,它的原理是通过颅骨将声音转化为神经冲动,通过内耳传至听觉中枢,因此不会对耳朵造成任何损伤,它同时也可以让耳朵更好地听到周围的声音。能够很好的提高…

hbuilderx+uniapp基于安卓的古汉语学习考试系统 微信小程序

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括古汉语学习软件APP的网络应用,在外国学习软件已经是很普遍的方式,不过国内的古汉语学习软件可能还处于起步阶段。古汉语学习软件具有古汉语、学习视频等…

2013 年一月联考逻辑真题

2013 年一月联考逻辑真题 真题(2013-26)-可能性推理的因果关系 26.某公司自去年初开始实施一项“办公用品节俭计划”,每位员工每月只能免费领用限量的纸笔等各类办公用品。年末统计时发现,公司用于各类办公用品的支出较上年度下降…

深度:解密智能汽车产业的3个世纪之问!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 汽车行业正在经历一场前所未有的变革,要理解这场深刻的汽车变革,我们从全新的电子电气架构,核心零部件的大量替换,到全新的制造工艺,探究电动车与燃油车的本质区别…

防雷工程中防雷等级的意义

在现代社会中,各种电子设备和通信系统已经成为我们生活中不可或缺的一部分。然而,雷击是这些设备和系统的一个常见问题,不仅会导致设备损坏,还可能对人们的生命财产造成威胁。因此,防雷措施变得尤为重要。 为了保护设…

OC 知识 多线程 GCD(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

Unity与Android交互(2)——常用交互方式

常用AndroidJavaClass/AndroidJavaObject实现C#调用Java代码,常用UnitySendMessage实现Java调用C#代码。 【调用代码示例】 Java代码为: package com.test.addtest;import com.unity3d.player.UnityPlayer;public class JavaTestClass {public static…

BM1684X移植自写算法记录

移植步骤------------------------------------------------------------------------ 首先搭建好自己的网络模型,并导出为onnx格式--具体可以参照--> https://github.com/warren-wzw/MNIST-pytorch.git 将onnx模型使用tpu-mlir工具转化为bmodel格式--具体可以…

2.3 TensorRT基于Entropy的校准

tensorRT的Entropy Calibration的伪代码,具体流程如下: for循环:遍历所有可能的分割点,从128到2048reference_distribution_P:将原始直方图bins按照当前分割点i进行切割,得到左侧的i个bin。outliers_count…

构建新型智能化智慧档案馆十防一体化解决技术方案

HONSOR现代化智慧档案馆智慧档案库房自动化温湿度环境安全监控系统方案【推介】 目前,我国档案正处于现代化科技飞升的起点,以物联网、大数据、智能化、云计算等为标志的网络充斥到社会生活、生产的各个角落。在我国,档案馆产生与发展经历了一…

为了搞懂ERP,我连问 ChatGPT 30个问题,通透!

我对ERP有很多的疑问,这次向ChatGPT请教,连问30个问题,瞬间觉得通透了很多,以下是我的问题和ChatGPT的回复,分为概念篇、架构篇和生态篇三部分,希望能带给你新的启示。 一、概念篇 1、ERP是什么&#xff1f…

图论与算法(5)图的广度优先遍历应用

1. 广度优先遍历 1.1 树的广度优先遍历 树的广度优先遍历(Breadth-First Traversal),也称为层次遍历,是一种按层次顺序逐级访问树节点的遍历方式。在广度优先遍历中,先访问树的根节点,然后按照从上到下、…

高频面试八股文用法篇(二) hive中几种排序类型区别

目录 排序函数 1、order by 2、sort by 3、distribute by 4、cluster by 总结 排序类型 1、order by order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 针对全局数据进行排序,所以最终只会有1个reduce,因…

开源 Golang 微服务入门一: HTTP 框架 Hertz

前言 从本篇笔记开始将介绍 Go 框架三件套(Web / RPC / ORM),框架的学习有助于后续课程的学习以及大项目的完成。本文主要介绍字节跳动的开源 Golang 微服务 HTTP 框架 Hertz。先了解一下三件套的相关基本知识,做一下铺垫&#x…

ArgoCD(二)--部署

3.2 ArgoCD部署 ArgoCD部署官网:https://argo-cd.readthedocs.io/en/stable/getting_started/ ArgoCD有两种部署方式:多租户部署和核心化部署: 多租户 常用于多个应用程序开发团队提供服务,并由平台团队维护的场景; …

BPMN模拟动画执行流程

目录 第一步:构建BPMN图 第二步:开启模拟 第三步:执行模拟 第四步:监听模拟 第一步:构建BPMN图 通过id标记,每一个流程 第二步:开启模拟 BPMN官方提供了各种各样的模块,比如执行…