JDBC作用接口和创建的步骤详细解析
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作用接口和创建的步骤详细解析相关推荐
- Place_opt步骤详细解析(另附两周年活动中奖名单)
Place_opt步骤详细解析(另附两周年活动中奖名单) 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 吾爱 IC 社区两周年福利活动已经结束,现公布活动 ...
- Kaggle Titanic Challenges 生存预测 数据预处理 模型训练 交叉验证 步骤详细解析
本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...
- 机器学习工程实例 垃圾邮件过滤系统 数据预处理 训练模型 交叉验证 精准率召回率计算 步骤详细解析
本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...
- Hive创建外部表详细步骤
Hive创建外部表详细步骤 一.创建外部表 二.hdfs建立文件夹存放数据 三.准备数据 四.上传数据到HDFS目录 五.Hive表关联文件得到数据 六.查询数据 一.创建外部表 create ext ...
- 如何创建Git项目详细步骤
更多内容,点击了解: https://how2j.cn/k/git/git-create/1343.html 目录 步骤 1 : 把自己的项目共享到Git上 步骤 2 : 在Git上新建仓库 步骤 3 ...
- 【转】LINUX内核编译步骤详细介绍
from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...
- LINUX内核编译步骤详细介绍
LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf Linux-2.6.18.2.tar.bz2 -C /usr/ ...
- (重点)MySQL(入门篇22)JDBC下载和驱动教程 ,第一个JDBC程序,驱动步骤的解析。
一.JDBC驱动教程 1. 下载JDBC jar 包 1.下载8,0的jar包可以支持之前的 5.6, 5.7, 8.0 mydql版本,请对应你自己的版本 2.下载链接如下 https://dev. ...
- 手摸手教你使用vue-cli脚手架-详细步骤图文解析[vue入门]
写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目 ...
- GNU Radio3.8创建OOT的详细过程(基础/C++)
GNU Radio 学习使用 OOT 系列教程: GNU Radio3.8创建OOT的详细过程(基础/C++) GNU Radio3.8创建OOT的详细过程(进阶/C++) GNU Radio3.8创 ...
最新文章
- C# textBox1.Append/Text实现换行
- leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
- mda.helper.php,dedecms后台更新缓慢甚至卡死怎么办
- 如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
- 自考计算机成绩,自考成绩计算机中是什么意思?
- 2016年 1月15号 cocoapods的导入
- 1005. 继续(3n+1)猜想 (25) PAT乙级真题
- 003.ASP.NET MVC集中管理Session
- mysql sql语句 编辑器_三个非常实用的开源SQL编辑器
- tms320c54x汇编语言,TMS320C54x DSP原理及应用
- 常见JAVA IO/NIO模型
- flutter 文字渐变和文字添加边框
- 数据FIFO的读写和信息FIFO的基本使用方法
- 企业盈利能力五大指标之:毛利率
- 拓嘉辰丰:哪些会影响拼多多推广效果
- k8s 部署 owncloud
- 【英语】为什么老外说的我们听不懂?
- CSMA/CD 和 CSMA/CA 之原理
- enable 华为交换机ntdp_华为交换机设置
- 企业申报能力评估CS1级\CS2级该如何选择?