MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字

DataSource dataSource=new MysqlDataSource();

步骤二:(向上转型)

((MysqlDataSource)dataSource).setUrl();

给大家回顾一下,向上转型,和向下转型

向上转型:子类对象转成父类。

向下转型:父类对象转成子类。

实际上⚠️⚠️

MysqlDataSource dataSource=new MysqlDataSource();

dataSource.setUrl()其实就可以了 🌚 🌚 🌚

🍅🍅🍅

当然这么做肯定有他们的道理。

按照最初的转型方法,本质是希望让MysqlDataSource,不要扩散到代码的其他部分··思想其实是想降低mysql驱动包,和我们项目之间的耦合关系,避免后续更换数据库,成本过大。

Url:唯一资源定位符,通常用Url来描述网络上一个资源的位置,mysql本体是服务器~,相当于是网络上的资源,里面写的东西直接复制贴贴就行,不用背

"jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&&useSSL=false"

这个是括号里面需要填写的,下面我们来分析一下每一块都是什么意思。

jdbc:mysql♈️url是一个什么类型的url ,这里的意思就是jdbc:mysql就是说给jdbc的mysql使用的。

127.0.0.1 ♉️网络上的一个地址~是通过这一串数字来表示的,这一串数字通常是4个部分,各个部分取值范围是0-255,4个部分使用,分割

3306♍️ 端号,区分主机上的应用程序

java108♋️数据库名字

characterEncoding=utf8&&useSSL=false; 统一字符集utf8

statement:是把sql原封不动的直接发给数据库服务器,数据库服务器自己解析sql

PreparedStatement,会先在客户端这边初步解析SQL(验证语法,是否正确),此时服务器就不用做这些检查了,从而降低服务器负担,另外,本身SQL存在String类型,JDBC提供statement对象,让我们把String对象转换成statement,再发给服务器执行,但是一般会使用PrparedStatement(预处理的语句)对象代替statement.

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Main {
   public static void main(String[] args) throws SQLException {
//1.创建数据源
      DataSource dataSource=new MysqlDataSource();
      ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&&useSSL=false");
//设置你的数据库名字的密码,不是随便设置哈,你自己的数据库密码,root也是不能乱设置
      ((MysqlDataSource)dataSource).setUser("root");
      ((MysqlDataSource)dataSource).setPassword("lcl15604007179");
//2.和数据库服务器建立链接,认准第二个sql的Connection,第一个com那个是mysql的驱动包
      Connection connection=dataSource.getConnection();
//构造SQL语句
      String sql=" insert student values(1,'张三') ";
      PreparedStatement statement=connection.prepareStatement(sql);
//4.执行SQL语句
      int n=statement.executeUpdate();     //返回有几行收到了影响
      System.out.println(n);
//5.释放必要资源,关闭链接 -注意关闭顺序,后创建的先关闭
      statement.close();          //创建的对象都会持有一些计算机硬件,软件中资源
      connection.close();
   }
}

🔯Java有垃圾回收机制,自动释放内存,但是资源不仅仅是内存啊,所以才需要关闭,资源需要手动关闭。

但是我们这么写,写出来的数据是写死的什么张三啥的,那我们该如何在动态的让用户输入数据呢,

PreparedStatement提供了我们占位符的写法,可以更优雅,更安全的解决上述问题

?是一个占位符,后续PreparedStatement会把变量数值带入到?中,

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Main {
   public static void main(String[] args) throws SQLException {
      Scanner scanner=new Scanner(System.in);
      System.out.println("输入姓名");
      String name=scanner.nextLine();
      System.out.println("输入数字");
      int id=scanner.nextInt();
//1.创建数据源
      DataSource dataSource=new MysqlDataSource();
      ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&&useSSL=false");
      ((MysqlDataSource)dataSource).setUser("root");
      ((MysqlDataSource)dataSource).setPassword("lcl15604007179");
//2.和数据库服务器建立链接
      Connection connection=dataSource.getConnection();
//3.构造SQL语句
      String sql=" insert student values(?,?) ";
      PreparedStatement statement=connection.prepareStatement(sql);
      statement.setInt(1,id);          //表示的是第一个问号
      statement.setString(2,name);     //表示的是第二个问号
//4.返回受影响的行数
      int n=statement.executeUpdate();
      System.out.println(n);
//5.释放必要资源,关闭链接
      statement.close();
      connection.close();
   }
}

🔜就算是插入,修改,删除也没有区别,删除就是轻微的改动,下面的setString和SQL语句而已

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Main {
   public static void main(String[] args) throws SQLException {
      Scanner scanner=new Scanner(System.in);
      System.out.println("输入姓名");
      String name=scanner.nextLine();
//1.创建数据源
      DataSource dataSource=new MysqlDataSource();
      ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&&useSSL=false");
      ((MysqlDataSource)dataSource).setUser("root");
      ((MysqlDataSource)dataSource).setPassword("lcl15604007179");
//2.和数据库服务器建立链接
      Connection connection=dataSource.getConnection();
//3.构造SQL语句
      String sql=" delete  from student  where  name=? ";
      PreparedStatement statement=connection.prepareStatement(sql);
      statement.setString(1,name);
//4.执行SQL语句
      int n=statement.executeUpdate();
      System.out.println(n);
//5关闭
      statement.close();
      connection.close();
   }
}

❤❤❤但是查询有说法,,一下就是查询要注意的操作。

//4.执行查询操作,要使用excuteQuery,返回值是一个ResultSet类型的对象,表示了一个表格

     ResultSet resultSet = statement.executeQuery();

//遍历结果集合

     while (resultSet.next())

这个意思是什么捏?💝💝💝想象有一个光标,这个光标的初始情况下,指向第一行记录的前一个位置~

如果每次调用next为true,取这行数据 ,取完这一行,下次又要调用next,此时要是返回false,循环结束

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Main {
   public static void main(String[] args) throws SQLException {
      Scanner scanner = new Scanner(System.in);
//1.创建数据源
      DataSource dataSource = new MysqlDataSource();
      ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108?characterEncoding=utf8&&useSSL=false");
      ((MysqlDataSource) dataSource).setUser("root");
      ((MysqlDataSource) dataSource).setPassword("lcl15604007179");
//2.和数据库服务器建立链接
      Connection connection = dataSource.getConnection();
//构造SQL语句
      String sql = " select * from student   ";
      PreparedStatement statement = connection.prepareStatement(sql);
//4.执行查询操作,要使用excuteQuery,返回值是一个ResultSet类型的对象,表示了一个表格
      ResultSet resultSet = statement.executeQuery();
//遍历结果集合
      while (resultSet.next()) {
//获取这一行学号列
         int id = resultSet.getInt("id");
//获取姓名列
         String name = resultSet.getString("name");
         System.out.println("id: " +  id + ",name: " + name);
      }
      statement.close();
      connection.close();
   }
}

当然里面也可以包含一些占位符。💖💖💖

public class Main {
   public static void main(String[] args) throws SQLException {
      Scanner scanner = new Scanner(System.in);
      int student_id=scanner.nextInt();
//1.创建数据源
      DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java108? characterEncoding=utf8&&useSSL=false");             
      ((MysqlDataSource) dataSource).setUser("root");
      ((MysqlDataSource) dataSource).setPassword("lcl15604007179");
//2.和数据库服务器建立链接
      Connection connection = dataSource.getConnection();
//注意哈,这里面是id不是你写的那个变量student_id
      String sql = " select * from student   where id = ? ";
      PreparedStatement statement = connection.prepareStatement(sql);
      statement.setInt(1,student_id);
//4.执行SQL语句
      ResultSet resultSet = statement.executeQuery();
      while (resultSet.next()) {
         int id = resultSet.getInt("id");
         String name = resultSet.getString("name");
         System.out.println("id: " +  id + ",name: " + name);
      }
//5.注意关闭的时候result也需要关闭
      resultSet.close();
      statement.close();
      connection.close();
   }
}

💟💟💟复杂的SQL也是这么写都支持(create table ,drop table都可以就是不推荐)

DataSource

Connection

PreparedStatement

Result

四大天王,通过这四个类,就可以基本吃遍JDBC编程

大佬会对JDBC进行进一步封装,数据库操作框架(虽然项目中不一定使用JDBC,一般都用框架代替,但是JDBC是不变化的,框架是可变的,基于JDBC去使用框架

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
Ubuntu 关系型数据库 MySQL
MySQL源码编译安装
本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。
621 4
MySQL源码编译安装
|
4月前
|
Ubuntu 关系型数据库 MySQL
MySQL二进制包安装
本文详细介绍了在多种Linux系统上通过二进制包安装MySQL 8.0和8.4版本的完整过程,涵盖用户创建、glibc版本匹配、程序解压、环境变量配置、初始化数据库及服务启动等步骤,并提供支持多发行版的一键安装脚本,助力高效部署MySQL环境。
533 4
MySQL二进制包安装
|
4月前
|
安全 关系型数据库 MySQL
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
本文详细介绍在openSUSE系统上通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,包括下载地址、RPM包解压、GPG密钥导入、使用rpm或zypper命令安装及服务启动验证,涵盖初始密码获取与安全修改方法,适用于无网络环境下的MySQL部署。
484 3
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
|
4月前
|
关系型数据库 MySQL Linux
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
本文介绍了在openSUSE系统上通过SUSE资源库安装MySQL 8.0和8.4版本的完整步骤,包括配置国内镜像源、安装MySQL服务、启动并验证运行状态,以及修改初始密码等操作,适用于希望在SUSE系列系统中快速部署MySQL的用户。
326 3
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
608 5
|
5月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
911 16
|
4月前
|
Ubuntu 关系型数据库 MySQL
MySQL包安装 -- Debian系列(离线DEB包安装MySQL)
本文详细介绍了在Ubuntu 24.04、22.04、20.04及Debian 12系统上,通过离线DEB包安装MySQL 8.0和8.4版本的完整步骤。涵盖下载地址、依赖处理、dpkg安装顺序、配置方法及服务启动验证,确保用户可顺利部署MySQL数据库。
1651 0
MySQL包安装 -- Debian系列(离线DEB包安装MySQL)
|
4月前
|
运维 Ubuntu 关系型数据库
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
本文介绍了在Debian系列系统(如Ubuntu、Debian 11/12)中通过APT仓库安装MySQL 8.0和8.4版本的完整步骤,涵盖添加官方源、配置国内镜像、安装服务及初始化设置,并验证运行状态,适用于各类Linux运维场景。
1362 0
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
|
4月前
|
Oracle 关系型数据库 MySQL
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
本文详细介绍在Rocky、CentOS、AlmaLinux、openEuler等主流Linux系统上,通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,涵盖下载、依赖处理、rpm/yum安装、服务启动、密码设置等关键环节,适用于多种企业级环境部署需求。
1113 0
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
|
4月前
|
存储 关系型数据库 MySQL
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
MySQL是一款开源关系型数据库,高性能、易用、跨平台,支持多种存储引擎,广泛应用于Web开发、企业级应用等领域。本教程介绍其特点、架构及在主流Linux系统中的安装配置方法。
779 0
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)

推荐镜像

更多