开开心心带你学习MySQL数据库之节尾篇

news2024/11/20 12:41:28

请添加图片描述

Java的JDBC编程

各种数据库,MySQL, Oracle, SQL Server在开发的时候,就会提供一组编程接口(API)
API ~~ Application Programming Interface ~~ 应用程序编程接口
计算机领域里面的一个非常常见的概念,
给你个软件,你能对他干啥(从代码层次上的)
基于它提供的这些功能,就可以写一些其它代码了(好抽象啊!)

例子:

image-20230910194247740

函数(function) => C语言和方法(method) => Java 有什么区别??
没区别~~ 很多时候,这两个词都是混用的~~ 严格意义的讲,是有区别,区别不大
本质上都是一个可以执行可以复用的代码片段~

JDBC的由来

MySQL, Oracle, SQL Server这些数据库提供的API是不相同的
原因: 有人的地方,就有江湖.MySQL, Oracle, SQL Server分别是由三个不同的团队开发的,出现了三份不同的API,导致身为程序猿的我们不得不学多份API,学习成本就变高了
这时,一个江湖地位非常重的大佬(Java )就来从中调节来了,
Java就提出来了一套API接口标准,要求其它厂商对照着这个标准来实现API,当然其它厂商的原生API并不用进行大幅度修改,只是写点代码,对其进行包装,包装成符合Java提出的这套API标准就行了 => 从今以后,Java程序猿只要学习这一套风格的API就够了~~ 不管换成什么的数据库,底层的东西怎么变,上层的东西即程序猿写的代码都是一样的 => 降低了程序猿的学习负担
java提出的这套API的名字就叫JDBC
JDBC,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问.

image-20230910215228119

Java程序猿要想进行数据库开发就需要在自己的项目中导入对应数据库的驱动包,才能编写代码
平时经常会见到硬件的驱动,硬件的驱动是让操作系统认识新的硬件设备,数据库的驱动是让JDBC能认识数据库的API

驱动包从哪里来?

~~ 数据库厂商提供的
1.mysql 的官方网站获取
~~ 下策 = > mysql被oracle 收购之后,官网也合并了,变成了oracle官网的一个子页面,而oracle的官网是一个非常难用的官网:
(1)找东西一点都不好找,不知道在那个角落藏着
(2)动不动的就要进行登录认证,对登录的账号密码要求还高,密码忘了找回也麻烦.
2.github => 开源的项目一般在它上面都会有代码的,这个在上面是找得到的
3.maven的中央仓库
maven => 相当于手机上的应用商店
中央仓库 => 托管了各种软件程序包的服务器
通过应用商店,就可以访问到软件程序包,下载下来
image-20230910232444068

image-20230910233329604

image-20230911000202934

jar包 => java 发布程序的典型方式.
java 通过 java 源文件编译成 .class 文件,jvm来解释执行.class每个java 都对应一个.class
如果代码里java 非常多呢??
把一大堆的.class给打成压缩包(类似于.rar.zip),此处的压缩包为.jar ~~ 一个.jar里面就包含很多很多.class文件~~ 把jar包拷贝给对方,对方就可以直接使用jvm 来运行了
此处, mysql驱动包的这个jar包不是单独运行的jar包,可以把它导入到咱们的项目然后就可以调用其中的方法和类来进行编程了!!!

黑客想入侵你的电脑也没那么容易,windows自带的杀毒软件已经很厉害了 => Windows安全中心
当然,如果你实在想访问一些未知网站,建议在电脑上装一个虚拟机软件,在虚拟机里面装一个虚拟的操作系统,通过虚拟机软件里面构造的虚拟主机来访问,就算黑客入侵,入侵的也是你的虚拟机 ~~ 到时候,虚拟机删了重新创一个就行了 ~~ 小技巧

如何导入数据库驱动包
  1. 在IDEA创建个Java项目

  2. 在项目里创建一个目录(New Directory)lib ~~ 复制jar包,粘贴进lib目录

  3. 右键lib,选择点击Add as library => 目的就是把这个lib目录标记成项目的库,idea就能识别这个目录里的jar包从而就可以调用里面的类来写代码了
    注:每次创建一个项目都得这样做

  4. 编写JDBC代码 ~~ 以插入为例
    在src中创建一个JDBCInsert.java文件

    public class JDBCInsert {
        public static void main(String[] args) throws SQLException {
            //JDBC 需要通过一下步骤来完成开发
    
            //1. 创建并初始化一个数据源
            DataSource dataSource = new MysqlDataSource();//向上转型~~父类引用指向子类对象
            ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/fly?characterEncoding=utf8&useSSL=false");//设置URL
            ((MysqlDataSource) dataSource).setUser("root");//设置用户名 ~~ 用户名都是root(默认就是root)
            ((MysqlDataSource) dataSource).setPassword("0213");//设置密码 ~~ 安装数据库的时候密码是什么就写什么
            //这几个东西都设置进去,才能够访问数据库服务器 
            //~~ 并且这个代码只是设置数据源,描述数据库服务器在哪
            //~~还没真正和数据库服务器连接呢!!
    
            /*(注意,上述代码,不使用向上转型,向下转型,就直来直去的写,也可以!!没有任何问题)(C++的风格),
            之所以向上面这么写,完全是因为Java这个圈子里,流行这么写
            代码如下:
            MysqlDataSource dataSource = new MysqlDataSource();
            dataSource.setURL();*/
    
            //2.和数据库服务器建立连接
            Connection connection = dataSource.getConnection();
    
            //3.构造SQL语句
            String sql = "insert into student value(1, 'fly')";
            PreparedStatement statement = connection.prepareStatement(sql);
    
    
            //4.执行SQL语句
            int ret = statement.executeUpdate();
            System.out.println("ret = " + ret);
            //把sql语句(预编译过的)发送给数据库服务器,由服务器做出响应
    
            //5.释放必要的资源
            statement.close();
            connection.close();
        }
    }
    
    1. 运行代码,查看运行结果,并在mysql客服端进行查看,再次验证是否成功
    对上述代码的部分理解

    数据源 => 数据从哪里来,描述数据库服务器在哪里 ~~ DataSource,一个接口,JDBC提供给我们的一个API

    setURL:这个方法,是子类有的,父类没有的方法,要想使用,就需要把父类引用转回成子类引用~~(向下转型)

    URL:计算机里的一个常见术语,唯一资源定位符 ~~ 描述网络上的某个资源所在的位置 ~~ 格式非常有特点!!

    jdbc:mysql://127.0.0.1:3306/fly?characterEncoding=utf8&useSSL=false
    jdbc => 固定的
    mysql => 看你用的是什么数据库

    IP地址127.0.0.1 => mysql 数据库是一个"客户端服务器"结构的程序,客户端和服务器之间通过网络来通信 ~~ 网络上确定主机的位置就是通过IP地址来确定的 ~~ 127.0.0.1叫做环回IP,表示你自己的当前主机,因为咱们的数据库客户端(现在写的jdbc代码),数据库服务器(之前装存数据的服务)是在一个主机上~~ 当然,客户端和服务器在不同主机上,IP就得另写

    3306 => 端口号 ,端口用来区分应用程序,当前数据库服务器默认端口就是3306
    fly => 创建的数据库名 ~~ create database 数据库名;
    ? 号后面表示参数 => characterEncoding=utf8 ~~ 字符集使用utf-8, useSSL=false ~~ SSL是个加密协议,此处false表示不加密

    dataSource.getConnection();
    受查异常必须要显式处理,非受查异常不显式处理也没事
    如果你,流鼻涕,打喷嚏,咳嗽,时间放到没发生新冠的时候,是异常,但不用特别处理,过几天凭自身免疫力就好了 ~~ 非受查异常
    如果你,发烧在新冠期间,就赶紧测个核酸,必须赶紧隔离~~ 受查异常

    使用PreparedStatement提前预编译一下这个SQL字符串
    如果请求是个SQL 字符串,服务器是可以处理的.服务器就需要对SQL进行解析,理解这里的含义并执行
    ~~ 如果有几万个客户端都在发这个请求,对于服务器的压力就比较大了!!
    ~~ 让客户端来对SQL进行预编译,服务器做的工作就简单一些,压力就会小不少.好比学校食堂,要求同学吃完饭,自己把盘子送到回收处

    executeUpdate=> 返回 int 表示影响到的行数

    即使咱们使用代码来操作数据库,还是靠 sqI 语句!
    只不过是换成用代码来构造 sql
    前面 sql的各种语法仍然有效!!

    上面的代码,看起来麻烦,实际上非常简单 ~~
    这里的代码刚开始接触,会觉得很麻烦,涉及到很多新的类,新的方法,新的概念新的参数…
    但是多写几次就发现,这里的代码就是固定套路
    正因为如此,实际开发中,就会使用一些框架来简化数据库操作代码 ~~ MyBatis这样的框架就是如此 ~~
    光会框架是不行的,还得知道框架背后的操作,对原生的JDBC有足够的理解
    框架是一直在变的,但JDBC 是不变的!!!
    程序猿是不是吃青春饭?因为新的技术层出不穷
    ~~ 后浪拍死前浪了呀 ~~ 只有多掌握这些不变的,就能以不变,应万变

恋爱小技巧

~~ 和妹子说晚安,不要打晚安二字,而是打拼音wanan,
这么做的原因是wanan => 我 爱你 爱你
学到了没有兄弟们,这多浪漫啊!!!(*^▽^*)

注:该篇文章存在一些花絮待完善!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000772.html

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

相关文章

Python 图形化界面基础篇:创建你的第一个 Tkinter 窗口

Python 图形化界面基础篇:创建你的第一个 Tkinter 窗口 引言准备工作步骤1:导入 Tkinter 模块步骤2:创建主窗口步骤3:设置窗口标题步骤4:启动主事件循环 完整的示例代码代码解释结论 引言 欢迎来到 Python 图形化界面…

台积电、博通、英特尔等巨头积极进军硅光子技术领域 | 百能云芯

据传,台积电与博通、英伟达等大客户密切合作,共同致力于新一代超高速运算芯片的开发,预计明年下半年将开始迎来大规模订单。为此,台积电已投入逾200名研发人员,成立专门的先遣研发团队,以抓住基于硅光子制程…

windows环境下node安装教程(超详细)

安装node.js 1、下载node: 下载地址:下载 | Node.js 中文网 node.js的zip包安装时是直接解压缩后就可以了, node.js的msi包是傻瓜式一路next就可以了 选择一中方式就可以 2、解压后的目录,或者mis安装后的目录如下: 3、安装完后,可以在命令行中输入…

电池的健康状态 SOH 估计

电池的健康状态 SOH 估计 SOH(State of Health)估计通常用于描述电池的健康状态,即电池当前容量与初始容量的比值。 一种常见的SOH估计方法是基于经验的电池寿命预测方法,包括循环周期数法、安时法与加权安时法、面向事件的老化…

华为云云服务器云耀L实例评测 | 从零到一:华为云云耀云服务器L实例上手体验

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

学习记忆——记忆宫殿——编码——数字编码——数字声母

https://www.bilibili.com/video/BV1gb411x7ic?p7&vd_source5021bbafad5e5afcf1984c99432f8353 0—D:0象形D。 1—y:1的发音首字母是y。 2—Z:象形。 3—S:3的手音首字母是S。 4—h:倒象形。 5—w:5的…

ES6中的Promise对象

1. Promise是什么 Promise简单来说就是一个容器,里面保存着未来才会结束的事件的结果(这个事件就是异步操作)。Promise是一个对象(构造函数),可以获取异步操作的结果。 特点: 对象的状态不受外…

k8s优雅停服

在应用程序的整个生命周期中,正在运行的 pod 会由于多种原因而终止。在某些情况下,Kubernetes 会因用户输入(例如更新或删除 Deployment 时)而终止 pod。在其他情况下,Kubernetes 需要释放给定节点上的资源时会终止 po…

轻松省下大笔费用!5个你不得不知道的云渲染省钱攻略

 在今天的数字化时代,云渲染正以其强大的计算能力和高效的渲染速度成为许多设计师和创意工作者的首选。然而,使用云渲染服务也可能意味着额外的费用开销。幸运的是,本文将为您揭示5个轻松省下大笔费用的云渲染省钱攻略&#xff…

巨人互动|Facebook海外户Facebook客户反馈分数

Facebook客户反馈分数是一项用于衡量用户对Facebook产品和服务满意度的指标。该指标被广泛应用于各种调研和评估活动,帮助Facebook了解用户对其平台和功能的意见和建议,并从中识别出改进的机会。 巨人互动|Facebook海外户&Facebook新闻提要的算法&am…

门阀-bitlocker

一、bitlocker,可给C盘,D盘其他盘,&U盘加密; 1.1此处只涉及D盘加密 网址:如何开启BitLocker加密 保存恢复码 数据解密 基础篇【夻白咏技 057期】 - YouTube 步骤须知: D盘操作步骤: 1&am…

2023年锂行业研究报告

第一章 行业概况 1.1 定义 锂行业,作为有色金属行业中稀有金属子行业的重要组成部分,近年来受到了广泛的关注和研究。锂矿经过冶炼加工,可以得到多种锂盐产品。这些锂盐产品在传统工业中有着广泛的应用,尤其是在玻璃和陶瓷制造、…

勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?

摘要: .halo勒索病毒已成为数字世界中的威胁,通过高级加密技术将文件锁定,并要求支付赎金。本文91数据恢复将深入介绍.halo勒索病毒的工作原理,提供解锁被感染文件的方法,以及探讨如何有效预防这一威胁。如果您正在经…

串行通信协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、UART二、SPI二、IIC 前言 UART为异步串行通信,使用各自的时钟控制数据的发送和接受过程,不使用同步时钟,而是使用一些特…

苏宁API接口解析,实现按关键字搜索suning商品

苏宁API接口提供了多种搜索商品的方式,其中包括按关键字搜索。下面是一个简单的示例,演示如何使用苏宁API接口实现按关键字搜索商品: 点击获取key和secret 苏宁易购按关键字搜索suning商品 API 返回值说明 请求参数 请求参数:q…

UG\NX二次开发 计算一个向量的反向向量UF_VEC3_negate

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 计算一个向量的反向向量UF_VEC3_negate 效果: 代码: #include "me.hpp"void ufusr(char* param, int* retcode, int paramLen) {UF…

腾讯云4核8G服务器CVM S5性能测评及优惠价格表

腾讯云4核8G服务器CVM标准型S5实例性能测评,包括CPU型号、内存、系统盘、CVM实例规格性能测评,腾讯云4核8G租用优惠价格表,腾讯云服务器网分享腾讯云4核8G服务器CVM S5性能测评和租用费用: 目录 腾讯云4核8G服务器CVM S5性能测评…

单片机之硬件记录

一、概念 VBAT 当使用电池或其他电源连接到VBAT脚上时,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池,VBAT引脚应接到VDD引脚上。 VCC:Ccircuit 表示电路的意思,即接入电路的电压&#x…

【数据结构】【C++】平衡搜索二叉树的模拟实现(AVL树)

【数据结构】&&【C】平衡搜索二叉树的模拟实现(AVL树) 一.AVL树的性质二.AVL树的模拟实现①.AVL树结点的定义②. AVL树的插入③.平衡因子的更新④.左单旋⑤.右单旋⑥.双旋(左右旋/右左旋)⑧.AVL树的删除⑨.检查是否是AVL树 三.完整代码 一.AVL树的性质 AVL…

中国电子科技集团公司第十四研究所(中电14)部门科室介绍、能力要求、待遇薪资

0.基本 雷达中电第一所南京 1.一部(总体部) 与军队对接需求雷达的选型和交付能力要求:担责任、知识面广(天线、射频、信号处理、数据处理)、学习能力、对外沟通能力科室: 101:空军&#xff0…