JDBC

1.DCL(介绍)

1.1创建用户:

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; 关键字说明:
    1. `用户名`:将创建的用户名

2. `主机名`:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程 主机登陆,可以使用通配符%

3. `密码`:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

具体的操作:

-- 1.创建用户 identified by 为用户设置密码
-- user1用户只能在localhost这个IP登录mysql服务器
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
‐‐ user2用户可以在任何电脑上登录mysql服务器
CREATE USER 'user2'@'%' IDENTIFIED BY '123';

1.2授权用户

授权格式:GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名'; 关键字说明.

1. `GRANT` 授权关键字

2. 授予用户的权限,如`SELECT`,`INSERT`,`UPDATE`等。如果要授予所的权限则使用`ALL`

3. `数据库名.表名`:该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有数据库和表的相应操作权限则 可用*表示,如`*.*`

4. `'用户名'@'主机名'`: 给哪个用户授权

具体的操作:

1.1给luliang用户分配对test这个数据库操作的权限

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

1.2给luliang用户分配对所有的数据库操作的权限。

CRANT ALL ON *.* TO 'luliang'@'localhost';

1.3撤销授权

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

具体操作:

撤销luliang用户对test操作的权限。

REVOKE ALL ON test.*FROM 'luliang'@'localhost';

1.4查看权限

SHOW GRANTS FOR '用户名'@'主机名';

查看luiang用户的权限

SHOW GREATS FOR 'luliang'@'localhost';

1.5删除用户

DROP USER '用户名'@'主机名';

具体的操作:

DROP USER 'luliang'@'localhost';

1.6修改用户名

修改管理员密码

mysqladmin -uroot -p password 新密码 -- 新密码不需要加上引号

注意:需要在未登录MySql的情况下的操作

具体操作:

mysqlamdin -uroot -p password 123456

输入老密码

1.7修改普通用户密码

set password for 'luliang'@'localhost'=password('666666');

JDBC处理MysSQL中的用户:

JDBC的概念:

JDBC:是有Sun公司提供的一套的规范的(接口),由一推数据。

客户端操作MySQL数据库的方式

1. 使用第三方客户端来访问MySQL:SQLyog、Navicat、SQLWave、MyDB Studio、EMS SQL Manager for MySQL

2. 使用MySQL自带的命令行方式

3. 通过Java来访问MySQL数据库,

什么是JDBC: Java Data Base Connectivity (Java数据库连接) JDBC是Java访问数据库的 标准规范

JDBC的作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库)

JDBC的由来:

jdbc的好处;

建立与数据库的连接。
向数据库发起查询请求。
处理数据库返回结果。

JDBC的快速入门:

步骤:

1.注册驱动

2.获取连接

3.创建SQL执行平台

4.执行SQL语句

5.处理结果

6.释放资源

代码演示:

package com.luliang.JDBC;import org.junit.Test;
import java.sql.*;
public class Demo01 {@Testpublic void select() throws Exception {//1.注册驱动/*1. 注册驱动任意数据库的类都是java.sql.Driver的实现类,要注册的也是接口的实现类记住:MySql的驱动类名是:com.mysql.jdbc.Driver如何注册:不推荐的方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver());有问题:注册了2次硬编码问题推荐的方式:Class.forName("com.mysql.jdbc.Driver"); 把指定名称的类加载到JVM内存中本质是使用了反射技术*/Class.forName("com.mysql.jdbc.Driver");//2.获取连接/*2.获取连接连接对象:java.sql.Connection如何获取连接对象:DriverManager.getConnection(url, username, password)url:数据库连接地址。JDBC规定了url的写法 由三部分组成,三部分之间使用英文冒号连接第一部分:协议名,固定值jdbc第二部分:子协议,通常是数据库的类型,比如:MySql的写法是mysql第三部分:数据库的具体地址,由数据库厂商自行决定的,不同数据库的写法不同。MySql的写法://数据库的ip:数据库的端口/database的名称 比如://192.168.18.18:3306/heima63连接本机、默认端口的MySql,可以简写成:///heima63username:数据库的登录名password:数据库的密码*/Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lu", "root", "root");//3.创建SQL执行平台/*3.创建SQL执行平台SQL执行平台:是JDBC规范提供了,专门用来执行SQL语句的一个对象 java.sql.Statement获取的方式:connection.createStatement()*/Statement statement = connection.createStatement();//4.执行SQL语句/*执行SQL语句执行DQL语句:statement.executeQuery(sql),返回:ResultSet,查询的结果集DQL:查询数据1.查询所有的数据:select*from 表明2.查询指定的列:select 字段1,字段2,..from 表名;3.查询处理null值:select if null (字段,默认值) from 表名;4.查询并计算:select 字段1+字段2,.....from 表面;执行DML语句:statement.executeUpdate(sql),返回:int,表示影响的行数执行任意语句:statement.execute(sql),返回:boolean, 如果执行的是查询,返回true;否则返回false*/ResultSet resultSet = statement.executeQuery("SELECT *FROM emp ");//int resultSet = statement.executeUpdate("INSERT INTO student4(id,name,price) VALUES (NULL ,'luliang2',1000000)"); //返回值为://5.处理结果while (resultSet.next()){String name = resultSet.getString("name");String gender = resultSet.getString("gender");double salary = resultSet.getDouble("salary");Date join_date = resultSet.getDate("join_date");int dept_id = resultSet.getInt("dept_id");System.out.println("姓名:"+name+", 工资:"+salary+", 年龄:"+join_date+", 学号:"+dept_id+",性别:"+gender);}//System.out.println("影响行数:" + resultSet);//6.释放资源//释放资源。顺序:ResultSet=>Statement=>ConnectionresultSet.close();statement.close();connection.close();}
}

next用法:

JDBC常用的API

Connection接口:

package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;
import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection;
import java.sql.Statement;/*
面试题: 什么时候,需要把 setAtuoCommit设为 false?
答: 当有多个dml 同时执行,将其看做一个整体提交,则使用 事务管理 ,
则需要把 setAutoCommit 设为false;*/
public class Demo05 {public static void main(String[] args) throws Exception{//1.加载驱动,获取连接Connection connection = JdbcUtils1.getConnection();//2.开启事务把事务设置不自动提交connection.setAutoCommit(true);//设置这个不自动提交事务就是数据库的数据没有影响//3.创建sql对象(Statement / PreparedStatement /CallableStatement)Statement statement = connection.createStatement();//4.通过statement向数据库发出sql命令//对emp表进行操作: 把SMITH 的sal -10 给 KING sal+10int i = statement.executeUpdate("UPDATE emp SET salary=salary+10000 WHERE NAME ='孙悟空'");System.out.println("影响的行数:"+i);//5.关闭资源statement.close();connection.close();}
}

当有多个dml 同时执行,将其看做一个整体提交,则使用 事务管理 ,则需要把 setAutoCommit 设为false;

Statement接口和PreparedStatement的区别

后者的效率比前者高,在使用PreparedStatement对象执行SQL命令时,命令被数据库进行编译和解析,然后被放到命令缓冲区,然后,每当执行同一个PreparedStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区中可以返现预编译的命令,并且可以重新使用。如果insert、update、delete ,最好使用PreparedStatement,在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。

ResuilSet接口:

说明:在默认的情况下,我们的rs结果集,只能向前移动,这样rs结果就不能复用,如果希望复用,则可以这样做:

package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;/*
ResultSet 的可选项有:
resultSetType - 结果集类型,
它是 ResultSet.TYPE_FORWARD_ONLY、
ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一
resultSetConcurrency - 并发类型;
它是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE 之一*/
public class Demo07 {public static void main(String[] args) throws Exception{//查询//1.注册驱动,获取连接Connection connection = JdbcUtils1.getConnection();//2,创建SQL执行平台Statement statement = connection.createStatement();//执行SQL语句//假设我们希望resultSet结果,可以滚动(可以向前,也可以向后)ResultSet resultSet = statement.executeQuery("SELECT *FROM emp");while (resultSet.next()){System.out.println(resultSet.getString("name"));}System.out.println("---------------");resultSet.beforeFirst();while (resultSet.next()){System.out.println(resultSet.getString("name"));}}
}

JDBC的增删改查:

增:代码演示

package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;
import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
//插入
public class Demo02 {public static void main(String[] args) {Connection connertion = null;try {connertion = JdbcUtils1.getConnection();} catch (Exception e) {e.printStackTrace();}//创建SQL执行的平台Statement statement = null;try {statement = connertion.createStatement();} catch (SQLException e) {e.printStackTrace();}//执行SQL语句//执行DML语句:statement.executeUpdate(sql),返回值:int,表示影响的行数try {int i = statement.executeUpdate("INSERT INTO product1(id,pname,price)VALUES (null,'陆良1',100000.00)");System.out.println("处理结果:"+i);} catch (SQLException e) {e.printStackTrace();}try {statement.close();} catch (SQLException e) {e.printStackTrace();}try {connertion.close();} catch (SQLException e) {e.printStackTrace();}}
}

删:代码演示

package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;//删除
public class Demo04 {public static void main(String[] args) {Connection connertion = JdbcUtils.getConnertion();//创建SQL执行平台Statement statement=null;try {statement = connertion.createStatement();//执行SQL语句// 执行DML语句:statement.executeUpdate(sql),返回值:int,表示影响的行数int i = statement.executeUpdate("DELETE FROM product1 WHERE id=5");//处理SQL语句System.out.println("执行后的结果:"+i);//关闭资源流statement.close();} catch (SQLException e) {e.printStackTrace();}finally {try {connertion.close();} catch (SQLException e) {e.printStackTrace();}}}
}

改:代码演示

package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;//修改
public class Demo03 {public static void main(String[] args) {Connection connertion = JdbcUtils.getConnertion();Statement statement = null;//创建SQL平台try {statement = connertion.createStatement();//执行SQL语句int i = statement.executeUpdate("UPDATE product1 SET price=price+10000 WHERE id=1 ");System.out.println("执行影响后的:"+i);} catch (SQLException e) {e.printStackTrace();}finally {try {statement.close();} catch (SQLException e) {e.printStackTrace();}try {connertion.close();} catch (SQLException e) {e.printStackTrace();}}}
}

查:

package com.luliang.lianxi;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;//查询
public class Demo01 {public static void main(String[] args) throws Exception{//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee","root","root");//创建SQL执行平台Statement statement = connection.createStatement();//执行SQL语句//执行DQL语句:statement.executeQuery(sql),返回值:ResultSet,是查询的结果集对象ResultSet resultSet = statement.executeQuery("SELECT *FROM  employee");//处理结果while (resultSet.next()){System.out.println("id:"+resultSet.getInt("id")+",姓名:"+resultSet.getString("name")+", 密码:"+resultSet.getString("PASSWORD"));}//释放资源resultSet.close();statement.close();connection.close();}
}

JDBC的工具类封装:

==JDBC的事务管理==

事务管理相关的API

事务管理的方法,都是由Connection对象提供的:

  • 开启事务:connection.setAutoCommit(false)

  • 提交事务:connection.commit()

  • 回滚事务:connection.rollback()

事务管理的步骤:

try{//1.注册驱动//2.获取连接//===开启事务=== 只要在执行SQL之前开启即可//3.创建SQL执行平台//4.执行SQL语句//5.处理结果//===关闭事务:提交事务=== 只要在释放资源之前,关闭事务即可
}catch(Exception e){//===关闭事务:回滚事务===
}finally{//6.释放资源
}

JDBC的实现登录案例:

分析:

1.使用数据库保存的用户的账号和密码

2.让用户输入账号和密码

3.使用SQL根据用户的账号和密码去数据库查询数据

4.如果查询到数据,说明登录失败。

代码演示:

package com.luliang.DengLu;
import com.luliang.JDBCbao.JdbcUtils1;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
/*
1. 使用数据库保存用户的账号和密码
2. 让用户输入账号和密码
3. 使用SQL根据用户的账号和密码去数据库查询数据
4. 如果查询到数据,说明登录成功
5. 如果查询不到数据,说明登录失败*/
public class Demo01 {public static void main(String[] args) throws Exception{//1.编写代码让用户输入Scanner scanner = new Scanner(System.in);System.out.println("请你输入用户名:");String name = scanner.nextLine();System.out.println("请你输入密码:");String password=scanner.nextLine();//2.使用SQL根据用户的账号和密码去数据库查询数据//2.1注册驱动,获取连接Connection connection = JdbcUtils1.getConnection();//2.2创建SQL执行平台Statement statement = connection.createStatement();//2.3执行SQL语句String resultSet1="SELECT *FROM user WHERE name='"+name+"' AND password='"+password+"'";// 如果查询到数据,说明登录成功,如果查询不到数据,说明登录失败ResultSet resultSet = statement.executeQuery(resultSet1);//判断if(resultSet.next()){//能进来查询到了数据String  pname = resultSet.getString("name");System.out.println("欢迎你登陆:"+pname);}else {//查询不到数据,说明登陆失败System.out.println("账号密码错误....");}//关闭资源流resultSet.close();statement.close();connection.close();}
}

JDBC作用接口和创建的步骤详细解析相关推荐

  1. Place_opt步骤详细解析(另附两周年活动中奖名单)

    Place_opt步骤详细解析(另附两周年活动中奖名单) 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 吾爱 IC 社区两周年福利活动已经结束,现公布活动 ...

  2. Kaggle Titanic Challenges 生存预测 数据预处理 模型训练 交叉验证 步骤详细解析

    本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...

  3. 机器学习工程实例 垃圾邮件过滤系统 数据预处理 训练模型 交叉验证 精准率召回率计算 步骤详细解析

    本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...

  4. Hive创建外部表详细步骤

    Hive创建外部表详细步骤 一.创建外部表 二.hdfs建立文件夹存放数据 三.准备数据 四.上传数据到HDFS目录 五.Hive表关联文件得到数据 六.查询数据 一.创建外部表 create ext ...

  5. 如何创建Git项目详细步骤

    更多内容,点击了解: https://how2j.cn/k/git/git-create/1343.html 目录 步骤 1 : 把自己的项目共享到Git上 步骤 2 : 在Git上新建仓库 步骤 3 ...

  6. 【转】LINUX内核编译步骤详细介绍

    from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...

  7. LINUX内核编译步骤详细介绍

    LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf  Linux-2.6.18.2.tar.bz2 -C /usr/ ...

  8. (重点)MySQL(入门篇22)JDBC下载和驱动教程 ,第一个JDBC程序,驱动步骤的解析。

    一.JDBC驱动教程 1. 下载JDBC jar 包 1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本 2.下载链接如下 https://dev. ...

  9. 手摸手教你使用vue-cli脚手架-详细步骤图文解析[vue入门]

    写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目 ...

  10. GNU Radio3.8创建OOT的详细过程(基础/C++)

    GNU Radio 学习使用 OOT 系列教程: GNU Radio3.8创建OOT的详细过程(基础/C++) GNU Radio3.8创建OOT的详细过程(进阶/C++) GNU Radio3.8创 ...

最新文章

  1. C# textBox1.Append/Text实现换行
  2. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
  3. mda.helper.php,dedecms后台更新缓慢甚至卡死怎么办
  4. 如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
  5. 自考计算机成绩,自考成绩计算机中是什么意思?
  6. 2016年 1月15号 cocoapods的导入
  7. 1005. 继续(3n+1)猜想 (25) PAT乙级真题
  8. 003.ASP.NET MVC集中管理Session
  9. mysql sql语句 编辑器_三个非常实用的开源SQL编辑器
  10. tms320c54x汇编语言,TMS320C54x DSP原理及应用
  11. 常见JAVA IO/NIO模型
  12. flutter 文字渐变和文字添加边框
  13. 数据FIFO的读写和信息FIFO的基本使用方法
  14. 企业盈利能力五大指标之:毛利率
  15. 拓嘉辰丰:哪些会影响拼多多推广效果
  16. k8s 部署 owncloud
  17. 【英语】为什么老外说的我们听不懂?
  18. CSMA/CD 和 CSMA/CA 之原理
  19. enable 华为交换机ntdp_华为交换机设置
  20. 企业申报能力评估CS1级\CS2级该如何选择?

热门文章

  1. web压力测试工具比较
  2. java 文件转换成二进制_java实现文件转换成二进制存储与取出
  3. python处理wrf气象数据_气象数据处理:NetCDF文件处理
  4. WebM视频格式怎么转换成MP4
  5. DS1302时钟模块介绍及与USRAT HMI通信
  6. 搞深度学习如何快速读懂开源代码?
  7. jenkins详细入门教程
  8. 基于logistic模型,GM模型和Leslie模型全国人口预测
  9. mall商城 -小程序,h5和pc vue前后端分离
  10. knx智能照明控制系统电路图_智能照明控制系统KNX