• 开开心心带你学习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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      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 => 我 爱你 爱你
    学到了没有兄弟们,这多浪漫啊!!!(*^▽^*)

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

  • 相关阅读:
    后端Long型数据传到前端js后精度丢失的问题
    大学解惑06 - 要求输入框内只能输入2位以内小数,怎么做?
    中外人工智能专家共话大语言模型与 AI 创新
    Unity 编辑器常用方法
    外包干了一个月,技术明显进步。。。。。
    C++DAY44
    TCP为什么需要3次握手?
    vertx的学习总结三
    大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频
    初识OpenGL (-)纹理过滤(Texture Filtering)
  • 原文地址:https://blog.csdn.net/m0_73740682/article/details/132817836