学习大数据之JDBC(使用JAVA语句进行SQL操作)

文章目录

  • DCL语句
    • 创建用户
    • 授权用户
    • 撤销授权
    • 查看权限
    • 删除用户
    • 修改用户密码
      • 修改普通用户密码
  • JDBC
    • jdbc介绍
    • JDBC准备
    • JDBC开发步骤以及详解
    • JDBC注册驱动
    • JDBC获取连接
    • JDBC实现增删改操作
    • JDBC 工具类的使用

DCL语句

我们现在默认使用的都是root用户,超级管理源,拥有全部权限。但是,一个公司的数据库服务器上面可能同时运行着很多个项目的数据库。所以,我们应该根据不同的项目建立不用的用户,分配不同的权限来管理和维护数据库。
在这里插入图片描述

创建用户

CREATE USER ‘用户名’ @ ‘主机名’ IDENTIFIED BY ‘密码’;
关键字说明
1.用户名:创建的用户名
2.主机名:指定改用户再哪个主机上可以登录,如果是本地用户可用用’localhost’,如果是想让该用户可以任意远程登陆主机,可以使用通配符%
3.密码:该用户登录的密码,密码可以为空,改用户可以不输入密码就可以登录mysql
注意:创建用户是 可能会报错误
[Err] 1819 - Your password does not satisfy the current policy requirements
原因分析 你的密码不符合当前策略要求
输入代码查看当前数据库新建密码谣言策略,命令

SHOW VARIABLES LIKE 'validate_password%'

在这里插入图片描述
主要关注 vaildate_password_length 为8
vaildate_password_policy 密码强度
validate_password_policy 为密码强度检测
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
默认是1,即MEDIUM,设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

我们设置
密码检测强度为0
set global validate_password_policy=0;

具体操作
user1用户只能再localhost这个IP登录mysql服务器
CREATE USER ‘user1’ @ ‘localhost’ IDENTIFIED BY ‘12345678’;
user2用户可以在任何电脑上登录mysql服务器
CREATE USER ‘user2’ @ ‘%’ IDENTIFIED BY ‘12345678’;

授权用户

用户创建之后,基本没什么权限!需要给用户授权
在这里插入图片描述
授权格式:
GRANT 权限1,权限2. … ON 数据库名.表名 TO ‘用户名’ @ ‘主机名’
关键字说明
a.GRANT: 授权关键字
b.授予用户的权限:比如 ‘select’ ‘insert’ ‘update’等,如果要授予所有的权限,使用ALL
c.数据库名.表名: 该用户操作哪个数据库的哪些表,如果要授予该用户对所有数据库和表的相关操作权限,就可以用*表示
d.‘用户名’ @ ‘主机名’ :给那个用户分配权限
具体操作
1、给user1用户分配对test这个数据库的操作权限

GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON bigdata.* TO 'user1'@'localhost';

如果报错,可以查看自己的root用户是否有权限,如果没有权限,需要手动增加权限

#数据库中有一张user表记录所有用户,以下命令就是查看所有用户及其访问权限
SELECT user,host FROM mysql.user;
#查询用户权限表
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;

在这里插入图片描述
可以看到我们的root用户,拥有其相应的权限
2.给user2用户分配对所有数据库操作的权限

GRANT ALL ON *.* TO 'user2'@'%';

撤销授权

REVOKE 权限1,权限2 … ON 数据库.表名 FROM ‘用户名’ @ ‘主机名’
具体操作
撤销user1用户对数据库bigdata操作的权限

REVOKE ALL ON bigdata.* FROM 'user1'@'localhost';

查看权限

SHOW GRANTS FOR ‘用户名’@‘l主机名’;
具体操作 查看user1用户的权限

## 查看权限
SHOW GRANTS FOR 'user1'@'localhost';

删除用户

DROP USER ‘用户名’@‘l主机名’;
删除USER2

DROP USER 'user2'@'%';

1.创建新用户->分配一个用户名和密码进行mysql登录
CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;

a.用户名:创建的用户名
b.主机名:指定该用户在哪个主机上可以登录,如果是本地用户,可以用’localhost’,
如果想让该用户可以任意远程主机登录,可以使用通配符%
c.密码:该用户登录的密码,密码可以为空,如果为空,该用户可以不输入密码就可以登录mysql
– user1用户只能在localhost这个IP登录mysql服务器
CREATE USER ‘user1’@‘localhost’ IDENTIFIED BY ‘123’;
– user2用户可以在任何电脑上登录mysql服务器
CREATE USER ‘user2’@‘%’ IDENTIFIED BY ‘123’;
2.给新分配的用户分配权限->让用户能操作哪些库,以及对数据可以进行哪些操作
GRANT 权限1, 权限2… ON 数据库名.表名 TO ‘用户名’@‘主机名’;

a.GRANT:授权关键字
b.授予用户的权限,比如 ‘select’ ‘insert’ 'update’等,如果要授予所有的权限,使用 ‘ALL’
c.数据库名.表名:该用户操作哪个数据库的哪些表,如果要授予该用户对所有数据库和表的相关操作权限,就可以用表示: .
d.‘用户名’@‘主机名’:给哪个用户分配权限
– 给用户1分配权限
GRANT SELECT ON 220706_mysql03.
TO ‘user1’@‘localhost’;

– 给用户2分配权限
GRANT ALL ON . TO ‘user2’@‘%’;
3.删除用户
DROP USER ‘用户名’@‘主机名’;
用户名和主机名要和创建时的保持一致

修改用户密码

mysqladmin -u root - p password 新密码 – 新密码不需要加上引号
注意:需要在未登录mysql的情况下操作
具体操作

mysqladmin -u root - p password root
输入 老密码

修改普通用户密码

set password for ‘用户名’@‘主机名’ = password(‘新密码’);
注意:需要在登录MySQL的情况下操作
具体操作

SET password for 'user1'@'localhost' = password('66666666');

JDBC

jdbc介绍

1.问题描述:
如果开发一个功能,我们不可能直接在mysql工具中写sql语句,我们需要将sql语句写道逻辑代码中,利用APU让sql语句执行起来,从而操作数据库中的数据,我们可以利用java代码中的API ----- JDBC
2.JDBC:是一套操作数据库的API,是一种标准
在这里插入图片描述

JDBC准备

1.导jar包:
mysql-connector-java-8.0.25.jar
2.4大核心对象
a.DriverManager 类:注册驱动 ---- 指明操作的是哪个数据库
b.Connection接口:连接数据库 — 数据库密码,账号,指明操作哪个库
c.Satement接口:执行平台,用于执行sql语句
d.ResultSet接口:用于处理数据集
针对于增删改操作,不用处理结果集
针对于查询操作,需要处理结果集

JDBC开发步骤以及详解

1.注册驱动:指明操作的是哪款数据库
DriverManager类
2.获取连接:要连接数据库
a.Connection接口
b.获取:DriverManager中的静态方法
static Connection getConnection(String url, String user, String password)
3.准备sql语句:
写sql语句,写在String中
4.获取执行平台:执行sql语句
a.Statement接口
b.获取:Connection中的方法
Statement createStatement()
5.执行sql:
a.执行 Statement接口中的方法
int executeUpdate(String sql) — 针对于增删改sql操作的
ResultSet executeQuery(String sql) ---- 针对于查询操作的
6.处理结果集:ResultSet接口
a.方法:
boolean next() ---- 判断结果集中有没有下一个结果
getxxx()------ 获取结果集中的数据
7.关闭资源:
close()
结果集需要关闭:ResultSet
执行平台需要关闭:Statement
连接对象需要关闭:Connection

JDBC注册驱动

CREATE TABLE `user`(
  uid INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(10),
  `password` VARCHAR(20)
);

1.类:DriverManager类
2.方法:
static void registerDriver(Driver driver)
3.参数:Driver是一个接口,所以需要传递实现类
com.mysql.cj.jdbc.Driver
4.使用
DriverManager.registerDriver(new Driver());
5.小问题
a.我们使用的是DriverManager.registerDriver注册驱动
b.当我们进入到 com,mysql.cj.jdbc.Driver类中看源码,我们会发现一个问题:
Driver类中有一个静态代码块,在静态代码块中也写一个:
DriverManager.registerDriver(new Driver());
c.所以,如果我们要使用DriverManger,regiseterDriver(new Driver()) 注册驱动,挥着注册两次
d.问题解决:
我们只需要让Driver类中记载到内存,其中的静态代码块会自动执行
可以使用反射:Class.forName(“com.mysql.cj.jdbc.Driver”)
注册驱动:
Class.forName(“com.mysql.cj.jdbc.Driver”);

public class test02 {
    public static void main(String[] args) throws ClassNotFoundException {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
    }
}

JDBC获取连接

1.获取:DriverManager中的静态方法:
Connection getConnection(String url,String username,String password)
2.参数说明
url:数据库连接地址
a.jdbc:mysql://localhost:3306/数据库名称?参数&参数
b.此参数是一个请求参数:
?前面的叫做请求路径
?后米娜的叫做请求路径上携带的参数数据
服务器主机地址:端口号/部署时写的项目名/请求资源?请求参数&请求参数
c.请求参数:
key = value形式
username:mysql用户名
password:MySQL密码
在这里插入图片描述

public class test03 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接,连接数据库
        String url = "jdbc:mysql://192.168.10.100:3306/bigdata";
        String username = "root";
        String password = "12345678";
        final Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println("connection = " + connection);
    }
}

JDBC实现增删改操作

代码实例

package JDBC_EXC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class test03 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接,连接数据库,注意需要指定插入的数据使用什么数据集,否则会出现乱码??
        String url = "jdbc:mysql://192.168.10.100:3306/bigdata?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "12345678";
        final Connection connection = DriverManager.getConnection(url, username, password);
        //System.out.println("connection = " + connection);
        //准备sql语句
        //插入数据
        String sql_in = "INSERT INTO `user` VALUES(010,'大勇','6666');";
        //删除数据
        String sql_del = "DELETE FROM `user` WHERE uid = 2;";
        //修改数据
        String sql_update = "UPDATE `user` SET username = \"丁伟\" WHERE uid = 4;";
        //获取执行平台
        final Statement st = connection.createStatement();
        //执行sql语句:statement中的方法
        /*int executeUpdate(sql) --- 针对增删改操作
        * ResultSet executQuer(sql)  针对查询操作
        * */
        st.executeUpdate(sql_in);
        st.executeUpdate(sql_del);
        st.executeUpdate(sql_update);
        //处理结果集 ---- 操作为增删改时候,不用操作,此步略过

        //关闭资源
        st.close();
        connection.close();
    }
}

实现查询操作的代码实例

package JDBC_EXC;

import java.sql.*;

public class test04 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //引入驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接,连接数据库,注意需要指定插入的数据使用什么数据集,否则会出现乱码??
        String url = "jdbc:mysql://192.168.10.100:3306/bigdata?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "12345678";
        final Connection connection = DriverManager.getConnection(url, username, password);
        //System.out.println("connection = " + connection);
        //准备sql语句
        //插入数据
        String sql = "select * from `user`;";
        //获取执行平台
        final Statement st = connection.createStatement();
        //执行sql语句:statement中的方法
        /*int executeUpdate(sql) --- 针对增删改操作
         * ResultSet executQuer(sql)  针对查询操作
         * */
        final ResultSet resultSet = st.executeQuery(sql);
        //处理结果集 ---- 操作为增删改时候,不用操作,此步略过
        while(resultSet.next()){
            final Object uid = resultSet.getObject("uid");
            final Object username1 = resultSet.getObject("username");
            final Object password1 = resultSet.getObject("password");
            System.out.println(uid+"....."+username1+"...."+password);
        }
        //关闭资源
        st.close();
        connection.close();
    }
}

JDBC 工具类的使用

自定义工具类代码块

import java.sql.*;

public class JDBCUtils {
    private static  String url = null;
    private static  String username = null;
    private static  String password = null;
    /*
    * 注册驱动,数据库url,用户名,密码
    * 这四大参数应该上来就先初始化
    * 而且只需要初始化一次即可
    * 所以我们应该放到静态代码中
    * */
    static {
        try {
            //注册驱动,数据库url,用户名,密码
            //这四大参数应该上来就初始化
            //而且只需要初始话一次即可
            //所以需要放在静态代码块中
            Class.forName("com.mysql.cj.jdbc.Driver");
            username = "root";
            password = "12345678";
            url = "jdbc:mysql://192.168.10.100:3306/bigdata?useUnicode=true&characterEncoding=utf8";
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //获取连接
    public static Connection getConn(){
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //关闭资源
    public static  void close(Connection conn, Statement st, ResultSet rs){
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

进行测试,注意使用@Test前,需要先导包

import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo02JDBC {
    @Test
    public void insert() throws SQLException {
        /*
        * 获取连接 由于连接方法在工具类中是静态的,我们调用静态成员,所在的类会自动加载
        * 静态代码块也就会自动执行
        * */
        final Connection conn = JDBCUtils.getConn();
        //获取执行平台
        final Statement statement = conn.createStatement();
        //执行sql
        statement.executeUpdate("insert into user values(null,'楚云飞','8888');");
        //关闭资源
        JDBCUtils.close(conn,statement,null);
    }
}
   public void select() throws SQLException {
        /*
         * 获取连接 由于连接方法在工具类中是静态的,我们调用静态成员,所在的类会自动加载
         * 静态代码块也就会自动执行
         * */
        final Connection conn = JDBCUtils.getConn();
        //获取执行平台
        final Statement statement = conn.createStatement();
        //执行sql
        final ResultSet resultSet = statement.executeQuery("select * from `user`;");
        //处理结果集
        while (resultSet.next()){
            final Object uid = resultSet.getObject("uid");
            final Object username = resultSet.getObject("username");
            final Object password = resultSet.getObject("password");
            System.out.println(uid+"....."+username+"....."+password);
        }
        //关闭资源
        JDBCUtils.close(conn,statement,resultSet);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础系列 —— 汇编语言

Same hardware can run many different programs(Software) 文中提到的所有实现都可以参考:nand2tetris_sol,但是最好还是自己学习课程实现一遍,理解更深刻。 我们在之前的文章里,构建了 Register、RAM 和 ALU,使得我…

智慧物联-能源分析平台

物联能源分析平台是为了满足企业对能源管理和节能减排的需求而开发的一套在线平台。随着能源问题日益凸显,企业对能源的使用和管理面临着越来越大的挑战。因此,开发一个能够帮助企业实时监测、分析和优化能源消耗的平台变得尤为重要。 随着工业化和城市…

apifox创建接口含中文字符报错的两种解决方案

针对apifox的含中文报错解决方法: 方法一:创建相应接口后,在设置中URL自动编码为WHATING。 方法二:直接将浏览器的url复制到apifox中,浏览器会自动解析配置中文转换路径。

带大家做一个,易上手的家常水煮肉片

首先 我们泡一些腐竹 如果不会泡 可以查看我的文章 泡软超时干腐竹方法 然后 拿一块猪瘦肉 切 相对厚一点点的薄片 一包豆芽 洗干净 肉片装在大碗中 倒入 小半勺食用盐 适量胡椒粉 倒入一勺生抽 适量蚝油 一点点老抽 一勺淀粉 抓拌均匀 切一些 姜末 蒜末 一把花椒 七八个干…

常见技术难点及方案

1. 分布式锁 1.1 难点 1.1.1 锁延期 同一时间内不允许多个客户端同时获得锁; 1.1.2 防止死锁 需要确保在任何故障场景下,都不会出现死锁; 1.2.3 可重入 特殊的锁机制,它允许同一个线程多次获取同一个锁而不会被阻塞。 1.2…

Embedding #notebook

Embedding 上一个篇章huggingface tokenizer #notebook我们讲解了tokenizer的使用,这一个篇章我们继续讲解所谓的embedding,这是通向模型的第一个层,它实际上就是一个全连接层,那么从一个text文本’我爱中南大学’,经…

【微服务】以模块化单体架构开发微服务应用

目录 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战我们知道,起初,单体应用有显著的优势:它们更容易开发和部署。从开发人员的角度来看,这种简单性是有益的。一切都是集中的,可以快速更新任何部分的业务逻辑并立即看到结果。这种开…

matlab 去除海图的右上角的刻度

matlab 去除海图的右上角的刻度 matlab 去除海图的右上角的刻度 去除: 图片 未去除: 本期不提供图片的代码:以后收费发布;整理中; 本期思路解决方法来自物理海洋科研群中 只需要把m_grid的代码484-485和569-570行…

Redis消息队列与thinkphp/queue操作

业务场景 场景一 用户完成注册后需要发送欢迎注册的问候邮件、同时后台要发送实时消息给用户对应的业务员有新的客户注册、最后将用户的注册数据通过接口推送到一个营销用的第三方平台。 遇到两个问题: 由于代码是串行方式,流程大致为:开…

蓝桥杯day12刷题日记

P8720 [蓝桥杯 2020 省 B2] 平面切分 思路&#xff1a;首先借用dalao的图解释一下&#xff0c;又多出一条与当前平面任意一条直线都不重合线时&#xff0c;多了的平面是交点数1&#xff0c;所以用双层循环每次往里面加一条直线&#xff0c;计算交点 #include <iostream>…

生日悖论与概率分析:如何运用随机算法解答生日问题

生日&#xff0c;这个我们每年都会庆祝的特殊日子&#xff0c;在概率学和随机算法中却隐藏着许多有趣的秘密。今天&#xff0c;我们就来探讨一下如何利用概率分析和随机算法来解决与生日有关的几个常见问题&#xff1a;一次聚会需要邀请多少人&#xff0c;才能让其中3人的生日很…

嵌入式多层总线矩阵结构介绍

嵌入式系统中&#xff0c;多层总线矩阵结构是一种常见的总线连接方式&#xff0c;用于连接处理器核、内存、外设和其他系统组件&#xff0c;以实现数据传输和控制信号的交换。本文将介绍嵌入式多层总线矩阵结构的基本概念、主要特点以及在实际应用中的优势。 以下是我整理的关…

阿里云服务器价格购买价格表,2024新版报价查询

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)#POJ1185:炮兵阵地 #互不侵犯

目录 今日知识点&#xff1a; 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1和i-2行进行不断转移 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1行进行状态匹配&#xff0c;然后枚举国王数转移 POJ1185&#xff1a;炮兵阵地 思路&#xff1a; 题目&#xff1a;互…

代码随想录|Day27|贪心02|122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II

122.买卖股票的最佳时机II 本题可以将最终利润分解为每日利润&#xff1a; 假如第 0 天买入&#xff0c;第 3 天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - prices[0])。 如下图所…

机器人流程自动化技术(RPA)金融应用指南

1 范围 本文件提供了机器人流程自动化技术在金融领域应用的参考框架、技术设计、场景应用、安全管理、 成效评估等指南。 本文件适用于金融机构开展机器人流程自动化技术应用的产品设计、软件开发、系统评估等。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而构成…

深入探索JDK动态代理:从入门到原理的全面解析

文章目录 基本概念入门案例实现JDK动态代理的步骤入门实操拓展--动态生成代理类的几种方法方式一&#xff1a;通过getProxyClass方法获取代理实例方式二&#xff1a;通过newProxyInstance方法获取代理实例&#xff08;常用&#xff01;&#xff09;方式三&#xff1a;通过Lambd…

python--初学函数

函数&#xff08;function&#xff09;&#xff1a; 什么是函数&#xff1f; 具有名称的&#xff0c;是为了解决某一问题&#xff0c;功能代码的集合&#xff0c;叫做函数 python中函数如何定义&#xff1a;def>define function定义函数 def function_name([args临时变量…

Oracle 11G备份集中控制文件和spfile被异常删除

坐标大理&#xff0c;苍山下&#xff0c;洱海旁&#xff0c;风花雪月&#xff01;&#xff01; 今日一大早就接到一个case&#xff0c;根据客户描述&#xff0c;大概意思是昨天晚上发现18号的ctl和spfile无故消失&#xff0c;备份策略是一周一个0级增量备份&#xff0c;每日进…

数据库系统原理实验报告3 | 数据定义

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ———— 本次实验使用到的图形化工具&#xff1a;Heidisql 目录 一、实验目的 二、实验内容及步骤 1、创建数据库educ及其基…