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

请添加图片描述

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.mzph.cn/news/75749.shtml

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

相关文章

AJAX学习笔记5同步与异步理解

AJAX学习笔记4解决乱码问题_biubiubiu0706的博客-CSDN博客 示例 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>演示AJAX同步和异步</title> </head> <body> <script…

深眸科技自研轻辙视觉引擎,以AI机器视觉赋能杆号牌识别与分拣

电线杆号牌作为电力行业标识的一种&#xff0c;相当于电线杆的“身份证”&#xff0c;担负着宣传电力知识、安全警示的作用&#xff0c;用于户外使用标记输电线路电压等级、线路名称、杆塔编号等&#xff0c;能够清晰地记录电力线路杆的信息&#xff0c;并为电力线路的更改以及…

ChatGPT是如何辅助高效撰写论文及使用ChatGPT注意事项

ChatGPT发布近1年&#xff0c;各大高校对它的态度也发生了极大转变&#xff0c;今年3月发布ChatGPT禁令的牛剑等世界顶级名校也在近期解除了ChatGPT禁令&#xff0c;发布了生成式人工智能使用指南。 ChatGPT一定程度上可以解放科研人员的劳动力&#xff0c;与其直接禁止不如教…

Docker笔记-概念安装简单使用

概念 docker通用词汇。 镜像&#xff1a;Build&#xff0c;创建一个镜像。 仓库&#xff1a;Ship&#xff0c;从仓库和主机上运输镜像。 容器&#xff1a;Run&#xff0c;运行的镜像就是一个容器。 安装 Windows上安装 Docker对win10有原生的支持&#xff0c;win10下的是…

thinkphp6-简简单单地开发接口

目录 1.前言TP6简介 2.项目目录3.运行项目运行命令访问规则 4.model db使用db连接配置model编写及调用调用接口 5.返回json格式 1.前言 基于上篇文章环境搭建后&#xff0c;便开始简单学习上手开发接口…记录重要的过程&#xff01; Windows-试用phpthink发现原来可这样快速搭…

IDEA在创建包时如何把包分开实现自动分层

IDEA在创建包时如何把包分开实现自动分层 文章目录 IDEA在创建包时如何把包分开实现自动分层一、为什么要把包分开二、建包时如何把包自动分开三、如何编写配置文件路径&#xff1f; 一、为什么要把包分开 一开始的时候&#xff0c;我也一直以为包连在一起和分开没什么区别&am…

linux内核模块编译方法之模块编程详解

文章目录 一、模块传参二、模块依赖三、内核空间和用户空间四、执行流五、模块编程与应用编程的比较六、内核接口头文件查询总结 本期和大家主要分享的是驱动开发内核编译过程中对于模块是如何设计的&#xff0c;进行了详细的分享&#xff0c;从模块传参、模块依赖一直到内核空…

Linux dup dup2函数

/*#include <unistd.h>int dup2(int oldfd, int newfd);作用&#xff1a;重定向文件描述符oldfd 指向 a.txt, newfd 指向b.txt,调用函数之后&#xff0c;newfd和b.txt close&#xff0c;newfd指向a.txtoldfd必须是一个有效的文件描述符 */ #include <unistd.h> #i…

Python怎么实现更高效的数据结构和算法? - 易智编译EaseEditing

要实现更高效的数据结构和算法&#xff0c;你可以考虑以下几个方面的优化&#xff1a; 选择合适的数据结构&#xff1a; 选择最适合你问题的数据结构至关重要。例如&#xff0c;如果需要频繁插入和删除操作&#xff0c;可能链表比数组更合适。如果需要高效查找操作&#xff0…

基于java SpringBoot和Vue uniapp的影楼摄影预约小程序

摘要 今天信息技术的发展很快&#xff0c;其足迹在我们的生活中随处可见。它影响着我们的衣食住行等各种需求。影响也在逐渐增加&#xff0c;逐渐渗透到各行各业&#xff0c;在这种背景下&#xff0c;经过实地考察后&#xff0c;为了让婚纱照管理更加高效方便&#xff0c;我决定…

Mac系统 AndroidStudio Missing essential plugin:org.jetbrains.android报错

打开Android Studio,提示 Missing essential plugin:org.jetbrains.android错误&#xff0c;产生的原因是Kotlin被禁用。 解决的方法是删除disabled_plugins.txt&#xff0c;Mac OS对应的路径为&#xff1a; /Users/xzh/Library/Application Support/Google/AndroidStudio202…

C高级 DAY4

一、分支语句 case ...in语句 shell中的switch语句 case $变量名 in常量1)语句;; ------->类似于C中break的作用&#xff0c;;;除了最后一条分之外&#xff0c;都不能省略常量2)语句;; 常量n)语句;;*) ------->类似于C中default&#xff0c;但…

【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》

写在前面 2022年11月30日&#xff0c;ChatGPT模型问世后&#xff0c;立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者&#xff0c;都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说&#xf…

【多线程】volatile 关键字

volatile 关键字 1. 保证内存可见性2. 禁止指令重排序3. 不保证原子性 1. 保证内存可见性 内存可见性问题: 一个线程针对一个变量进行读取操作&#xff0c;另一个线程针对这个变量进行修改操作&#xff0c; 此时读到的值&#xff0c;不一定是修改后的值&#xff0c;即这个读线…

【动态规划】01背包问题

文章目录 动态规划&#xff08;背包问题&#xff09;1. 01背包2. 分割等和子集3. 目标和4. 最后一块石头的重量 || 动态规划&#xff08;背包问题&#xff09; 1. 01背包 题目链接 状态表示 dp[i][j] 表示从前i个物品当中挑选&#xff0c;总体积不超过j,所有选法当中能挑选出…

UDP协议

目录 一、UDP协议端格式 二、UDP的特点 一、UDP协议端格式 16位UDP长度&#xff0c;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的最大长度&#xff1b;如果校验和出错&#xff0c;就会直接丢弃 二、UDP的特点 UDP相对于TCP来说是相对简单的&#xff0c;但是在传输…

Redis:实现全局唯一id

&#xff08;笔记总结自《黑马点评》项目&#xff09; 一、全局ID生成器 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 二、原理 为了增加ID的安全性&#xff0c;我们可以不直接使用Redis自增的数值&…

测试----计算机网络

文章目录 计算机网络的历史OSI/RM 协议TCP/IP协议IP地址 计算机网络的历史 50-60年代 内部通讯功能&#xff08;连接的是同一台主机&#xff0c;只能主机和终端之间通信&#xff0c;终端和终端之间的通讯只能依靠主机来传输&#xff09;60-70年代 主机和主机之间能通讯70年代-…

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

chrome 谷歌浏览器 导出插件拓展和导入插件拓展

给同事部署 微软 RPA时&#xff0c;需要用到对应的chrome浏览器插件&#xff1b;谷歌浏览器没有外网是不能直接下载拓展弄了半小时后才弄好&#xff0c;竟发现没有现成的教程&#xff0c;遂补充&#xff1b; 如何打包导出 谷歌浏览器 地址栏敲 chrome://extensions/在对应的地…