
1. 能够使用DCL处理MySQL中的用户
2. 能够理解JDBC的概念
3. 能够使用Connection接口
4. 能够使用Statement接口
5. 能够使用ResultSet接口
6. 能够使用JDBC实现对单表数据增、删、改、查
7. 能够使用JDBC操作事务
8. 能够编写JDBC工具类
9. 能够完成JDBC实现登录案例
第1章 DCL
我们现在默认使用的都是root用户,超级管理员,拥有全部的权限。但是,一个公司里面的数据库 服务器上面可能同时运行着很多个项目的数据库。所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限来管理和维护数据库。

1.1 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
关键字说明: 1. 用户名 :将创建的用户名 2. 主机名 :指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该 用户可以从任意远程主机登陆,可以使用通配符% 3. 密码 :该用户的登陆密码,密码可以为空, 如果为空则该用户可以不需要密码登陆服务器
具体操作:

1.2 授权用户
用户创建之后,基本没什么权限!需要给用户授权

授权格式: GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名'; 关键字说明:
1. GRANT 授权关键字
2. 授予用户的权限,如 SELECT , INSERT , UPDATE 等。如果要授予所的权 限则使用 ALL
3. 数据库名.表名 :该用户可以操作哪个数据库的哪些表。如果要授予该用户对所有 数据库和表的相应操作权限则可用表示,如`.*
4. '用户名'@'主机名'`: 给哪个用户授权
具体操作:
1. 给user1用户分配对test这个数据库操作的权限

2. 给user2用户分配对所有数据库操作的权限

1.3 撤销授权
REVOKE 权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名';
具体操作:
撤销user1用户对test操作的权限

1.4 查看权限
SHOW GRANTS FOR '用户名'@'主机名'; 具体操作:
查看user1用户的权限

1.5 删除用户
DROP USER '用户名'@'主机名'; 具体操作:
删除user2

1.6 修改用户密码
1.6.1 修改管理员密码
mysqladmin -uroot -p password 新密码 -- 新密码不需要加上引号
注意:需要在未登陆MySQL的情况下操作。
具体操作:


1.6.2 修改普通用户密码
set password for '用户名'@'主机名' = password('新密码');
注意:需要在登陆MySQL的情况下操作。
具体操作:

第2章 JDBC的概念
客户端操作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可以操作数据库)
第3章 JDBC的由来
1. 直接写代码操作数据库

直接写代码操作数据库存在的问题:
1.1 不知道MySQL数据库的操作方式,解析方式
1.2 代码繁琐,写起来麻烦
1. 3MySQL和Oracle等其他数据库的操作方式和解析方式不同,每个数据库都要写一套代码
1. 4MySQL和Oracle等其他数据库相互切换麻烦
2. JDBC规范定义接口,具体的实现由各大数据库厂商来实现 JDBC是Java访问数据库的标准规 范。真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家 数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可。 数据库驱动由数据库厂商提供。

JDBC的好处:
1. 我们只需要会调用JDBC接口中的方法即可,使用简单
2. 使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库
JDBC会用到的包:
1. java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection
2. javax.sql: JDBC访问数据库的扩展包
3. 数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver
JDBC四个核心对象(重点,重点,重点) 这几个类都是在java.sql包中
1. DriverManager: 用于注册驱动
2. Connection: 表示与数据库创建的连接
3. Statement: 执行SQL语句的对象
4. ResultSet: 结果集或一张虚拟表

第4章 JDBC获取连接
Connection 表示Java程序与数据库之间的连接,只有拿到Connection才能操作数据库。
JDBC获取连接步骤
1.导入驱动Jar包
2.注册驱动
3.获取连接
4.1 导入驱动Jar包



4.2 注册驱动
我们Java程序需要通过数据库驱动才能连接到数据库,因此需要注册驱动。 MySQL的驱动的入口类是: com.mysql.jdbc.Driver

4.2.1 API介绍
java.sql.DriverManager 类用于注册驱动。提供如下方法注册驱动

4.2.2 使用步骤
1.DriverManager.registerDriver(驱动对象); 传入对应参数即可
4.2.3 案例代码

通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册


注意:使用 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); ,存在两方面不足
1. 硬编码,后期不易于程序扩展和维护
2. 驱动被注册两次
使用 Class.forName("com.mysql.jdbc.Driver"); 加载驱动,这样驱动只会注册一次

演示: Class.forName("包名.类名"); 会走这个类的静态代码块

通常开发我们使用Class.forName() 加载驱动。 Class.forName("com.mysql.jdbc.Driver"); 会 走Driver类的静态代码块。在静态代码块中注册一次驱动。

总结:注册MySQL驱动使用 Class.forName("com.mysql.jdbc.Driver");
4.3 获取连接
4.3.1 API介绍
java.sql.DriverManager 类中有如下方法获取数据库连接

4.3.2 参数说明
1. String url :连接数据库的URL,用于说明连接数据库的位置
2. String user :数据库的账号
3. String password :数据库的密码
连接数据库的URL地址格式: 协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值

MySQL写法:
jdbc:mysql://localhost:3306/day24 如果是本地服务器,端口号是默认的3306,则可以简 写: jdbc:mysql:///day24 4.3.3
注意事项
如果数据出现乱码需要加上参数: ?characterEncoding=utf8,表示让数据库以UTF-8编码来处理数据。
如: jdbc:mysql://localhost:3306/day24?characterEncoding=utf8
4.3.4 使用步骤
1.DriverManager.getConnection(url, user, password); 传入对应参数即可
4.3.5 案例代码

4.3.6 案例效果

第5章 JDBC实现对单表数据增、删、改、查
我们要对数据库进行增、删、改、查,需要使用 Statement 对象来执行SQL语句。
5.1 准备数据

5.2 JDBC实现对单表数据增、删、改
5.2.1 API介绍 5.2.1.1 获取Statement对象API介绍
在 java.sql.Connection 接口中有如下方法获取到 Statement 对象

5.2.1.2 Statement的API介绍

5.2.2 使用步骤
1. 注册驱动
2. 获取连接
3. 获取Statement对象
4. 使用Statement对象执行SQL语句
5. 释放资源
5.2.3 案例代码

5.2.4 案例效果

5.3 JDBC实现对单表数据查询
ResultSet 用于保存执行查询SQL语句的结果。 我们不能一次性取出所有的数据,需要一行一行的取出。
ResultSet的原理:
1. ResultSet内部有一个指针,刚开始记录开始位置
2. 调用next方法, ResultSet内部指针会移动到下一行数据
3. 我们可以通过ResultSet得到一行数据 getXxx得到某列数据

ResultSet获取数据的API 其实ResultSet获取数据的API是有规律的get后面加数据类型。我们统称 getXXX()

使用JDBC查询数据库中的数据的步骤
1. 注册驱动
2. 获取连接
3. 获取到Statement
4. 使用Statement执行SQL
5. ResultSet处理结果
6. 关闭资源
案例代码


注意:
1. 如果光标在第一行之前,使用rs.getXXX()获取列值,报错:Before start of result set
2. 如果光标在最后一行之后,使用rs.getXXX()获取列值,报错:After end of result set
案例效果

总结:其实我们使用JDBC操作数据库的步骤都是固定的。不同的地方是在编写SQL语句
1. 注册驱动
2. 获取连接
3. 获取到Statement
4. 使用Statement执行SQL
5. ResultSet处理结果
6. 关闭资源
第6章 JDBC事务
之前我们是使用MySQL的命令来操作事务。接下来我们使用JDBC来操作银行转账的事务。
6.1 准备数据

6.2 API介绍
Connection 接口中与事务有关的方法

6.3 使用步骤
1. 注册驱动
2. 获取连接
3. 获取到Statement
4. 开启事务
5. 使用Statement执行SQL
6. 提交或回滚事务
7. 关闭资源
6.4 案例代码


6.5 案例效果

第7章 JDBC获取连接与关闭连接工具类实现
通过上面案例需求我们会发现每次去执行SQL语句都需要注册驱动,获取连接,得到Statement, 以及释放资源。发现很多重复的劳动,我们可以将重复的代码定义到某个类的方法中。直接调用方 法,可以简化代码。 那么我们接下来定义一个 JDBCUtil 类。把注册驱动,获取连接,得到 Statement,以及释放资源的代码放到这个类的方法中。以后直接调用方法即可。
7.1 编写JDBC工具类步骤
1. 将固定字符串定义为常量
2. 在静态代码块中注册驱动(只注册一次)
3. 提供一个获取连接的方法 static Connection getConneciton();
4. 定义关闭资源的方法 close(Connection conn, Statement stmt, ResultSet rs)
5. 重载关闭方法 close(Connection conn, Statement stmt)
7.2 案例代码
JDBCUtils.java


Demo06.java




7.3 案例效果

第8章 JDBC实现登录案例
8.1 案例需求
模拟用户输入账号和密码登录网站
8.2 案例效果

8.3 案例分析
1. 使用数据库保存用户的账号和密码
2. 让用户输入账号和密码
3. 使用SQL根据用户的账号和密码去数据库查询数据
4. 如果查询到数据,说明登录成功
5. 如果查询不到数据,说明登录失败
8.4 实现步骤
1. 创建一个用户表保存用户的账号和密码,并添加一些数据,SQL语句如下:

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

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


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






